home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1995 March / macformat-022.iso / Shareware City / Developers / src / out-of-phase-102-c / OutOfPhase 1.02 Source / OutOfPhase Folder / TrackAttributeDialog.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-11-23  |  66.2 KB  |  1,949 lines  |  [TEXT/KAHL]

  1. /* TrackAttributeDialog.c */
  2. /*****************************************************************************/
  3. /*                                                                           */
  4. /*    Out Of Phase:  Digital Music Synthesis on General Purpose Computers    */
  5. /*    Copyright (C) 1994  Thomas R. Lawrence                                 */
  6. /*                                                                           */
  7. /*    This program is free software; you can redistribute it and/or modify   */
  8. /*    it under the terms of the GNU General Public License as published by   */
  9. /*    the Free Software Foundation; either version 2 of the License, or      */
  10. /*    (at your option) any later version.                                    */
  11. /*                                                                           */
  12. /*    This program is distributed in the hope that it will be useful,        */
  13. /*    but WITHOUT ANY WARRANTY; without even the implied warranty of         */
  14. /*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          */
  15. /*    GNU General Public License for more details.                           */
  16. /*                                                                           */
  17. /*    You should have received a copy of the GNU General Public License      */
  18. /*    along with this program; if not, write to the Free Software            */
  19. /*    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.              */
  20. /*                                                                           */
  21. /*    Thomas R. Lawrence can be reached at tomlaw@world.std.com.             */
  22. /*                                                                           */
  23. /*****************************************************************************/
  24.  
  25. #include "MiscInfo.h"
  26. #include "Audit.h"
  27. #include "Debug.h"
  28. #include "Definitions.h"
  29.  
  30. #include "TrackAttributeDialog.h"
  31. #include "Screen.h"
  32. #include "Memory.h"
  33. #include "Alert.h"
  34. #include "TextEdit.h"
  35. #include "SimpleButton.h"
  36. #include "TrackObject.h"
  37. #include "Main.h"
  38. #include "WrapTextBox.h"
  39. #include "Numbers.h"
  40. #include "RadioButton.h"
  41. #include "NoteObject.h"
  42.  
  43.  
  44. #define WINXSIZE (490)
  45.  
  46. #define INDENTVALUE (90)
  47.  
  48. #define DESCRIPTIONX (10)
  49. #define DESCRIPTIONY (6)
  50. #define DESCRIPTIONWIDTH (WINXSIZE - DESCRIPTIONX - DESCRIPTIONX)
  51. #define DESCRIPTIONHEIGHT (15)
  52.  
  53. #define NAMEPROMPTX (10)
  54. #define NAMEPROMPTY (DESCRIPTIONY + DESCRIPTIONHEIGHT + 10)
  55.  
  56. #define NAMEEDITX (NAMEPROMPTX + INDENTVALUE)
  57. #define NAMEEDITY (NAMEPROMPTY - 3)
  58. #define NAMEEDITWIDTH (160)
  59. #define NAMEEDITHEIGHT (19)
  60.  
  61. #define INSTRPROMPTX (NAMEPROMPTX)
  62. #define INSTRPROMPTY (NAMEPROMPTY + NAMEEDITHEIGHT + 3)
  63.  
  64. #define INSTREDITX (INSTRPROMPTX + INDENTVALUE)
  65. #define INSTREDITY (INSTRPROMPTY - 3)
  66. #define INSTREDITWIDTH (NAMEEDITWIDTH)
  67. #define INSTREDITHEIGHT (NAMEEDITHEIGHT)
  68.  
  69. #define EARLYLATEADJUSTPROMPTX (10)
  70. #define EARLYLATEADJUSTPROMPTY (INSTRPROMPTY + INSTREDITHEIGHT + 3 + 5)
  71.  
  72. #define EARLYLATEADJUSTEDITX (EARLYLATEADJUSTPROMPTX + INDENTVALUE)
  73. #define EARLYLATEADJUSTEDITY (EARLYLATEADJUSTPROMPTY - 3)
  74. #define EARLYLATEADJUSTEDITWIDTH (80)
  75. #define EARLYLATEADJUSTEDITHEIGHT (NAMEEDITHEIGHT)
  76.  
  77. #define RELEASEPOINT1PROMPTX (EARLYLATEADJUSTEDITX + EARLYLATEADJUSTEDITWIDTH + 10)
  78. #define RELEASEPOINT1PROMPTY (EARLYLATEADJUSTPROMPTY)
  79.  
  80. #define RELEASEPOINT1EDITX (RELEASEPOINT1PROMPTX + INDENTVALUE)
  81. #define RELEASEPOINT1EDITY (EARLYLATEADJUSTEDITY)
  82. #define RELEASEPOINT1WIDTH (EARLYLATEADJUSTEDITWIDTH)
  83. #define RELEASEPOINT1HEIGHT (NAMEEDITHEIGHT)
  84.  
  85. #define RELEASEPOINT1STARTBUTTONX (RELEASEPOINT1EDITX + RELEASEPOINT1WIDTH + 5)
  86. #define RELEASEPOINT1STARTBUTTONY (RELEASEPOINT1EDITY)
  87. #define RELEASEPOINT1STARTBUTTONWIDTH (50)
  88. #define RELEASEPOINT1STARTBUTTONHEIGHT (NAMEEDITHEIGHT)
  89.  
  90. #define RELEASEPOINT1ENDBUTTONX (RELEASEPOINT1STARTBUTTONX\
  91.                     + RELEASEPOINT1STARTBUTTONWIDTH + 5)
  92. #define RELEASEPOINT1ENDBUTTONY (RELEASEPOINT1STARTBUTTONY)
  93. #define RELEASEPOINT1ENDBUTTONWIDTH (RELEASEPOINT1STARTBUTTONWIDTH)
  94. #define RELEASEPOINT1ENDBUTTONHEIGHT (RELEASEPOINT1STARTBUTTONHEIGHT)
  95.  
  96. #define LOUDNESSPROMPTX (EARLYLATEADJUSTPROMPTX)
  97. #define LOUDNESSPROMPTY (EARLYLATEADJUSTPROMPTY + EARLYLATEADJUSTEDITHEIGHT - 1)
  98.  
  99. #define LOUDNESSEDITX (LOUDNESSPROMPTX + INDENTVALUE)
  100. #define LOUDNESSEDITY (LOUDNESSPROMPTY - 3)
  101. #define LOUDNESSEDITWIDTH (EARLYLATEADJUSTEDITWIDTH)
  102. #define LOUDNESSEDITHEIGHT (NAMEEDITHEIGHT)
  103.  
  104. #define RELEASEPOINT2PROMPTX (LOUDNESSEDITX + LOUDNESSEDITWIDTH + 10)
  105. #define RELEASEPOINT2PROMPTY (LOUDNESSPROMPTY)
  106.  
  107. #define RELEASEPOINT2EDITX (RELEASEPOINT2PROMPTX + INDENTVALUE)
  108. #define RELEASEPOINT2EDITY (LOUDNESSEDITY)
  109. #define RELEASEPOINT2EDITWIDTH (EARLYLATEADJUSTEDITWIDTH)
  110. #define RELEASEPOINT2EDITHEIGHT (NAMEEDITHEIGHT)
  111.  
  112. #define RELEASEPOINT2STARTBUTTONX (RELEASEPOINT2EDITX + RELEASEPOINT2EDITWIDTH + 5)
  113. #define RELEASEPOINT2STARTBUTTONY (RELEASEPOINT2EDITY)
  114. #define RELEASEPOINT2STARTBUTTONWIDTH (RELEASEPOINT1STARTBUTTONWIDTH)
  115. #define RELEASEPOINT2STARTBUTTONHEIGHT (NAMEEDITHEIGHT)
  116.  
  117. #define RELEASEPOINT2ENDBUTTONX (RELEASEPOINT2STARTBUTTONX\
  118.                     + RELEASEPOINT2STARTBUTTONWIDTH + 5)
  119. #define RELEASEPOINT2ENDBUTTONY (RELEASEPOINT2STARTBUTTONY)
  120. #define RELEASEPOINT2ENDBUTTONWIDTH (RELEASEPOINT2STARTBUTTONWIDTH)
  121. #define RELEASEPOINT2ENDBUTTONHEIGHT (RELEASEPOINT2STARTBUTTONHEIGHT)
  122.  
  123. #define ACCENT1PROMPTX (EARLYLATEADJUSTPROMPTX)
  124. #define ACCENT1PROMPTY (RELEASEPOINT2PROMPTY + RELEASEPOINT2EDITHEIGHT - 1)
  125.  
  126. #define ACCENT1EDITX (ACCENT1PROMPTX + INDENTVALUE)
  127. #define ACCENT1EDITY (ACCENT1PROMPTY - 3)
  128. #define ACCENT1EDITWIDTH (EARLYLATEADJUSTEDITWIDTH)
  129. #define ACCENT1EDITHEIGHT (NAMEEDITHEIGHT)
  130.  
  131. #define ACCENT2PROMPTX (ACCENT1EDITX + ACCENT1EDITWIDTH + 10)
  132. #define ACCENT2PROMPTY (ACCENT1PROMPTY)
  133.  
  134. #define ACCENT2EDITX (ACCENT2PROMPTX + INDENTVALUE)
  135. #define ACCENT2EDITY (ACCENT1EDITY)
  136. #define ACCENT2EDITWIDTH (ACCENT1EDITWIDTH)
  137. #define ACCENT2EDITHEIGHT (NAMEEDITHEIGHT)
  138.  
  139. #define ACCENT3PROMPTX (EARLYLATEADJUSTPROMPTX)
  140. #define ACCENT3PROMPTY (ACCENT2PROMPTY + ACCENT2EDITHEIGHT - 1)
  141.  
  142. #define ACCENT3EDITX (ACCENT3PROMPTX + INDENTVALUE)
  143. #define ACCENT3EDITY (ACCENT3PROMPTY - 3)
  144. #define ACCENT3EDITWIDTH (EARLYLATEADJUSTEDITWIDTH)
  145. #define ACCENT3EDITHEIGHT (NAMEEDITHEIGHT)
  146.  
  147. #define ACCENT4PROMPTX (ACCENT3EDITX + ACCENT3EDITWIDTH + 10)
  148. #define ACCENT4PROMPTY (ACCENT3PROMPTY)
  149.  
  150. #define ACCENT4EDITX (ACCENT4PROMPTX + INDENTVALUE)
  151. #define ACCENT4EDITY (ACCENT4PROMPTY - 3)
  152. #define ACCENT4EDITWIDTH (ACCENT3EDITWIDTH)
  153. #define ACCENT4EDITHEIGHT (NAMEEDITHEIGHT)
  154.  
  155. #define PITCHDISPRATEPROMPTX (EARLYLATEADJUSTPROMPTX)
  156. #define PITCHDISPRATEPROMPTY (ACCENT4PROMPTY + ACCENT4EDITHEIGHT - 1)
  157.  
  158. #define PITCHDISPRATEEDITX (PITCHDISPRATEPROMPTX + INDENTVALUE)
  159. #define PITCHDISPRATEEDITY (PITCHDISPRATEPROMPTY - 3)
  160. #define PITCHDISPRATEEDITWIDTH (EARLYLATEADJUSTEDITWIDTH)
  161. #define PITCHDISPRATEEDITHEIGHT (NAMEEDITHEIGHT)
  162.  
  163. #define PITCHDISPDEPTHPROMPTX (PITCHDISPRATEEDITX + PITCHDISPRATEEDITWIDTH + 10)
  164. #define PITCHDISPDEPTHPROMPTY (PITCHDISPRATEPROMPTY)
  165.  
  166. #define PITCHDISPDEPTHEDITX (PITCHDISPDEPTHPROMPTX + INDENTVALUE)
  167. #define PITCHDISPDEPTHEDITY (PITCHDISPDEPTHPROMPTY - 3)
  168. #define PITCHDISPDEPTHEDITWIDTH (EARLYLATEADJUSTEDITWIDTH)
  169. #define PITCHDISPDEPTHEDITHEIGHT (NAMEEDITHEIGHT)
  170.  
  171. #define PITCHDISPDEPTHHERTZBUTTONX (PITCHDISPDEPTHEDITX + PITCHDISPDEPTHEDITWIDTH + 5)
  172. #define PITCHDISPDEPTHHERTZBUTTONY (PITCHDISPDEPTHEDITY)
  173. #define PITCHDISPDEPTHHERTZBUTTONWIDTH (RELEASEPOINT1STARTBUTTONWIDTH)
  174. #define PITCHDISPDEPTHHERTZBUTTONHEIGHT (PITCHDISPDEPTHEDITHEIGHT)
  175.  
  176. #define PITCHDISPDEPTHHALFSTEPBUTTONX (PITCHDISPDEPTHHERTZBUTTONX\
  177.                     + PITCHDISPDEPTHHERTZBUTTONWIDTH + 5)
  178. #define PITCHDISPDEPTHHALFSTEPBUTTONY (PITCHDISPDEPTHHERTZBUTTONY)
  179. #define PITCHDISPDEPTHHALFSTEPBUTTONWIDTH (PITCHDISPDEPTHHERTZBUTTONWIDTH + 20)
  180. #define PITCHDISPDEPTHHALFSTEPBUTTONHEIGHT (PITCHDISPDEPTHHERTZBUTTONHEIGHT)
  181.  
  182. #define HURRYUPPROMPTX (EARLYLATEADJUSTPROMPTX)
  183. #define HURRYUPPROMPTY (PITCHDISPDEPTHPROMPTY + PITCHDISPDEPTHEDITHEIGHT - 1)
  184.  
  185. #define HURRYUPEDITX (HURRYUPPROMPTX + INDENTVALUE)
  186. #define HURRYUPEDITY (HURRYUPPROMPTY - 3)
  187. #define HURRYUPEDITWIDTH (EARLYLATEADJUSTEDITWIDTH)
  188. #define HURRYUPEDITHEIGHT (NAMEEDITHEIGHT)
  189.  
  190. #define PITCHDISPSTARTPROMPTX (HURRYUPEDITX + HURRYUPEDITWIDTH + 10)
  191. #define PITCHDISPSTARTPROMPTY (HURRYUPPROMPTY)
  192.  
  193. #define PITCHDISPSTARTEDITX (PITCHDISPSTARTPROMPTX + INDENTVALUE)
  194. #define PITCHDISPSTARTEDITY (PITCHDISPSTARTPROMPTY - 3)
  195. #define PITCHDISPSTARTEDITWIDTH (EARLYLATEADJUSTEDITWIDTH)
  196. #define PITCHDISPSTARTEDITHEIGHT (NAMEEDITHEIGHT)
  197.  
  198. #define PITCHDISPSTARTSTARTBUTTONX (PITCHDISPSTARTEDITX + PITCHDISPSTARTEDITWIDTH + 5)
  199. #define PITCHDISPSTARTSTARTBUTTONY (PITCHDISPSTARTEDITY)
  200. #define PITCHDISPSTARTSTARTBUTTONWIDTH (RELEASEPOINT1STARTBUTTONWIDTH)
  201. #define PITCHDISPSTARTSTARTBUTTONHEIGHT (PITCHDISPSTARTEDITHEIGHT)
  202.  
  203. #define PITCHDISPSTARTENDBUTTONX (PITCHDISPSTARTSTARTBUTTONX\
  204.                     + PITCHDISPSTARTSTARTBUTTONWIDTH + 5)
  205. #define PITCHDISPSTARTENDBUTTONY (PITCHDISPSTARTSTARTBUTTONY)
  206. #define PITCHDISPSTARTENDBUTTONWIDTH (PITCHDISPSTARTSTARTBUTTONWIDTH)
  207. #define PITCHDISPSTARTENDBUTTONHEIGHT (PITCHDISPSTARTSTARTBUTTONHEIGHT)
  208.  
  209. #define STEREOPOSITIONPROMPTX (EARLYLATEADJUSTPROMPTX)
  210. #define STEREOPOSITIONPROMPTY (HURRYUPPROMPTY + HURRYUPEDITHEIGHT - 1)
  211.  
  212. #define STEREOPOSITIONEDITX (STEREOPOSITIONPROMPTX + INDENTVALUE)
  213. #define STEREOPOSITIONEDITY (STEREOPOSITIONPROMPTY - 3)
  214. #define STEREOPOSITIONEDITWIDTH (EARLYLATEADJUSTEDITWIDTH)
  215. #define STEREOPOSITIONEDITHEIGHT (NAMEEDITHEIGHT)
  216.  
  217. #define DETUNEPROMPTX (STEREOPOSITIONEDITX + STEREOPOSITIONEDITWIDTH + 10)
  218. #define DETUNEPROMPTY (STEREOPOSITIONPROMPTY)
  219.  
  220. #define DETUNEEDITX (DETUNEPROMPTX + INDENTVALUE)
  221. #define DETUNEEDITY (DETUNEPROMPTY - 3)
  222. #define DETUNEEDITWIDTH (EARLYLATEADJUSTEDITWIDTH)
  223. #define DETUNEEDITHEIGHT (NAMEEDITHEIGHT)
  224.  
  225. #define DETUNEHERTZBUTTONX (DETUNEEDITX + DETUNEEDITWIDTH + 5)
  226. #define DETUNEHERTZBUTTONY (DETUNEEDITY)
  227. #define DETUNEHERTZBUTTONWIDTH (RELEASEPOINT1STARTBUTTONWIDTH)
  228. #define DETUNEHERTZBUTTONHEIGHT (DETUNEEDITHEIGHT)
  229.  
  230. #define DETUNEHALFSTEPBUTTONX (DETUNEHERTZBUTTONX + DETUNEHERTZBUTTONWIDTH + 5)
  231. #define DETUNEHALFSTEPBUTTONY (DETUNEHERTZBUTTONY)
  232. #define DETUNEHALFSTEPBUTTONWIDTH (DETUNEHERTZBUTTONWIDTH + 20)
  233. #define DETUNEHALFSTEPBUTTONHEIGHT (DETUNEHERTZBUTTONHEIGHT)
  234.  
  235. #define SURROUNDPOSITIONPROMPTX (EARLYLATEADJUSTPROMPTX)
  236. #define SURROUNDPOSITIONPROMPTY (STEREOPOSITIONPROMPTY + NAMEEDITHEIGHT - 1)
  237.  
  238. #define SURROUNDPOSITIONEDITX (SURROUNDPOSITIONPROMPTX + INDENTVALUE)
  239. #define SURROUNDPOSITIONEDITY (SURROUNDPOSITIONPROMPTY - 3)
  240. #define SURROUNDPOSITIONEDITWIDTH (EARLYLATEADJUSTEDITWIDTH)
  241. #define SURROUNDPOSITIONEDITHEIGHT (NAMEEDITHEIGHT)
  242.  
  243. #define DURATIONPROMPTX (SURROUNDPOSITIONEDITX + SURROUNDPOSITIONEDITWIDTH + 10)
  244. #define DURATIONPROMPTY (SURROUNDPOSITIONPROMPTY)
  245.  
  246. #define DURATIONEDITX (DURATIONPROMPTX + INDENTVALUE)
  247. #define DURATIONEDITY (DURATIONPROMPTY - 3)
  248. #define DURATIONEDITWIDTH (EARLYLATEADJUSTEDITWIDTH)
  249. #define DURATIONEDITHEIGHT (NAMEEDITHEIGHT)
  250.  
  251. #define DURATIONADDBUTTONX (DURATIONEDITX + DURATIONEDITWIDTH + 5)
  252. #define DURATIONADDBUTTONY (DURATIONEDITY)
  253. #define DURATIONADDBUTTONWIDTH (RELEASEPOINT1STARTBUTTONWIDTH)
  254. #define DURATIONADDBUTTONHEIGHT (DURATIONEDITHEIGHT)
  255.  
  256. #define DURATIONMULTBUTTONX (DURATIONADDBUTTONX + DURATIONADDBUTTONWIDTH + 5)
  257. #define DURATIONMULTBUTTONY (DURATIONADDBUTTONY)
  258. #define DURATIONMULTBUTTONWIDTH (DURATIONADDBUTTONWIDTH)
  259. #define DURATIONMULTBUTTONHEIGHT (DURATIONADDBUTTONHEIGHT)
  260.  
  261. #define OKBUTTONWIDTH (80)
  262. #define OKBUTTONHEIGHT (21)
  263. #define OKBUTTONY (DURATIONEDITY + DURATIONEDITHEIGHT + 15)
  264. #define OKBUTTONX ((WINXSIZE / 4) - (OKBUTTONWIDTH / 2))
  265.  
  266. #define CANCELBUTTONWIDTH (OKBUTTONWIDTH)
  267. #define CANCELBUTTONHEIGHT (OKBUTTONHEIGHT)
  268. #define CANCELBUTTONY (OKBUTTONY)
  269. #define CANCELBUTTONX (((3 * WINXSIZE) / 4) - (OKBUTTONWIDTH / 2))
  270.  
  271. #define WINYSIZE (CANCELBUTTONY + CANCELBUTTONHEIGHT + 10)
  272.  
  273.  
  274. typedef struct
  275.     {
  276.         WinType*                        ScreenID;
  277.         TextEditRec*                NameEdit;
  278.         TextEditRec*                InstrumentEdit;
  279.         TextEditRec*                EarlyLateAdjustEdit;
  280.         TextEditRec*                ReleasePoint1Edit;
  281.         RadioButtonRec*            ReleasePoint1StartButton;
  282.         RadioButtonRec*            ReleasePoint1EndButton;
  283.         TextEditRec*                LoudnessEdit;
  284.         TextEditRec*                ReleasePoint2Edit;
  285.         RadioButtonRec*            ReleasePoint2StartButton;
  286.         RadioButtonRec*            ReleasePoint2EndButton;
  287.         TextEditRec*                Accent1Edit;
  288.         TextEditRec*                Accent2Edit;
  289.         TextEditRec*                Accent3Edit;
  290.         TextEditRec*                Accent4Edit;
  291.         TextEditRec*                PitchDispRateEdit;
  292.         TextEditRec*                PitchDispDepthEdit;
  293.         RadioButtonRec*            PitchDispDepthHertzButton;
  294.         RadioButtonRec*            PitchDispDepthHalfStepButton;
  295.         TextEditRec*                HurryUpEdit;
  296.         TextEditRec*                PitchDispStartEdit;
  297.         RadioButtonRec*            PitchDispStartStartButton;
  298.         RadioButtonRec*            PitchDispStartEndButton;
  299.         TextEditRec*                StereoPositionEdit;
  300.         TextEditRec*                DetuneEdit;
  301.         RadioButtonRec*            DetuneHertzButton;
  302.         RadioButtonRec*            DetuneHalfStepButton;
  303.         TextEditRec*                SurroundEdit;
  304.         TextEditRec*                DurationEdit;
  305.         RadioButtonRec*            DurationAddButton;
  306.         RadioButtonRec*            DurationMultButton;
  307.         SimpleButtonRec*        OKButton;
  308.         SimpleButtonRec*        CancelButton;
  309.     } WindowRec;
  310.  
  311.  
  312. static void                    UpdateTheWindow(WindowRec* Window)
  313.     {
  314.         CheckPtrExistence(Window);
  315.         TextEditFullRedraw(Window->NameEdit);
  316.         TextEditFullRedraw(Window->InstrumentEdit);
  317.         TextEditFullRedraw(Window->EarlyLateAdjustEdit);
  318.         TextEditFullRedraw(Window->ReleasePoint1Edit);
  319.         RedrawRadioButton(Window->ReleasePoint1StartButton);
  320.         RedrawRadioButton(Window->ReleasePoint1EndButton);
  321.         TextEditFullRedraw(Window->LoudnessEdit);
  322.         TextEditFullRedraw(Window->ReleasePoint2Edit);
  323.         RedrawRadioButton(Window->ReleasePoint2StartButton);
  324.         RedrawRadioButton(Window->ReleasePoint2EndButton);
  325.         TextEditFullRedraw(Window->Accent1Edit);
  326.         TextEditFullRedraw(Window->Accent2Edit);
  327.         TextEditFullRedraw(Window->Accent3Edit);
  328.         TextEditFullRedraw(Window->Accent4Edit);
  329.         TextEditFullRedraw(Window->PitchDispRateEdit);
  330.         TextEditFullRedraw(Window->PitchDispDepthEdit);
  331.         RedrawRadioButton(Window->PitchDispDepthHertzButton);
  332.         RedrawRadioButton(Window->PitchDispDepthHalfStepButton);
  333.         TextEditFullRedraw(Window->HurryUpEdit);
  334.         TextEditFullRedraw(Window->PitchDispStartEdit);
  335.         RedrawRadioButton(Window->PitchDispStartStartButton);
  336.         RedrawRadioButton(Window->PitchDispStartEndButton);
  337.         TextEditFullRedraw(Window->StereoPositionEdit);
  338.         TextEditFullRedraw(Window->DetuneEdit);
  339.         RedrawRadioButton(Window->DetuneHertzButton);
  340.         RedrawRadioButton(Window->DetuneHalfStepButton);
  341.         TextEditFullRedraw(Window->SurroundEdit);
  342.         TextEditFullRedraw(Window->DurationEdit);
  343.         RedrawRadioButton(Window->DurationAddButton);
  344.         RedrawRadioButton(Window->DurationMultButton);
  345.         RedrawSimpleButton(Window->OKButton);
  346.         RedrawSimpleButton(Window->CancelButton);
  347.         SetClipRect(Window->ScreenID,0,0,WINXSIZE,WINYSIZE);
  348.         DrawWrappedTextBox(Window->ScreenID,"Adjust the track's attributes and defaults:",
  349.             GetScreenFont(),9,DESCRIPTIONX,DESCRIPTIONY,DESCRIPTIONWIDTH,DESCRIPTIONHEIGHT);
  350.         DrawTextLine(Window->ScreenID,GetScreenFont(),9,"Track Name:",11,NAMEPROMPTX,
  351.             NAMEPROMPTY,ePlain);
  352.         DrawTextLine(Window->ScreenID,GetScreenFont(),9,"Instrument Name:",16,
  353.             INSTRPROMPTX,INSTRPROMPTY,ePlain);
  354.         DrawTextLine(Window->ScreenID,GetScreenFont(),9,"Hit Time:",9,
  355.             EARLYLATEADJUSTPROMPTX,EARLYLATEADJUSTPROMPTY,ePlain);
  356.         DrawTextLine(Window->ScreenID,GetScreenFont(),9,"Release 1:",10,
  357.             RELEASEPOINT1PROMPTX,RELEASEPOINT1PROMPTY,ePlain);
  358.         DrawTextLine(Window->ScreenID,GetScreenFont(),9,"Loudness:",9,
  359.             LOUDNESSPROMPTX,LOUDNESSPROMPTY,ePlain);
  360.         DrawTextLine(Window->ScreenID,GetScreenFont(),9,"Release 2:",10,
  361.             RELEASEPOINT2PROMPTX,RELEASEPOINT2PROMPTY,ePlain);
  362.         DrawTextLine(Window->ScreenID,GetScreenFont(),9,"Accent 1:",9,
  363.             ACCENT1PROMPTX,ACCENT1PROMPTY,ePlain);
  364.         DrawTextLine(Window->ScreenID,GetScreenFont(),9,"Accent 2:",9,
  365.             ACCENT2PROMPTX,ACCENT2PROMPTY,ePlain);
  366.         DrawTextLine(Window->ScreenID,GetScreenFont(),9,"Accent 3:",9,
  367.             ACCENT3PROMPTX,ACCENT3PROMPTY,ePlain);
  368.         DrawTextLine(Window->ScreenID,GetScreenFont(),9,"Accent 4:",9,
  369.             ACCENT4PROMPTX,ACCENT4PROMPTY,ePlain);
  370.         DrawTextLine(Window->ScreenID,GetScreenFont(),9,"Pitch Disp Rate:",16,
  371.             PITCHDISPRATEPROMPTX,PITCHDISPRATEPROMPTY,ePlain);
  372.         DrawTextLine(Window->ScreenID,GetScreenFont(),9,"Pitch Disp Depth:",17,
  373.             PITCHDISPDEPTHPROMPTX,PITCHDISPDEPTHPROMPTY,ePlain);
  374.         DrawTextLine(Window->ScreenID,GetScreenFont(),9,"Hurry-Up:",9,
  375.             HURRYUPPROMPTX,HURRYUPPROMPTY,ePlain);
  376.         DrawTextLine(Window->ScreenID,GetScreenFont(),9,"Pitch Disp Start:",17,
  377.             PITCHDISPSTARTPROMPTX,PITCHDISPSTARTPROMPTY,ePlain);
  378.         DrawTextLine(Window->ScreenID,GetScreenFont(),9,"Stereo Pos:",11,
  379.             STEREOPOSITIONPROMPTX,STEREOPOSITIONPROMPTY,ePlain);
  380.         DrawTextLine(Window->ScreenID,GetScreenFont(),9,"Detune:",7,
  381.             DETUNEPROMPTX,DETUNEPROMPTY,ePlain);
  382.         DrawTextLine(Window->ScreenID,GetScreenFont(),9,"Surround Pos:",13,
  383.             SURROUNDPOSITIONPROMPTX,SURROUNDPOSITIONPROMPTY,ePlain);
  384.         DrawTextLine(Window->ScreenID,GetScreenFont(),9,"Duration Adjust:",16,
  385.             DURATIONPROMPTX,DURATIONPROMPTY,ePlain);
  386.     }
  387.  
  388.  
  389. /* this routine asks the user for the instrument name and track name associated */
  390. /* with a track.  It takes the track object as an argument, so it worries about */
  391. /* the updating and cancelling & all that. */
  392. void                                TrackAttributeDialog(struct TrackObjectRec* TheTrackThing)
  393.     {
  394.         WindowRec*                Window;
  395.         char*                            StringTemp;
  396.         MyBoolean                    LoopFlag;
  397.         TextEditRec*            ActiveTextEdit;
  398.         MyBoolean                    DoItFlag EXECUTE(= -31342);
  399.  
  400.         CheckPtrExistence(TheTrackThing);
  401.  
  402.         Window = (WindowRec*)AllocPtrCanFail(sizeof(WindowRec),"TrackAttributeDialogWindow");
  403.         if (Window == NIL)
  404.             {
  405.              FailurePoint1:
  406.                 AlertHalt("There is not enough memory available to edit the track attributes.",
  407.                     NIL);
  408.                 return;
  409.             }
  410.  
  411.         Window->ScreenID = MakeNewWindow(eModelessDialogWindow,eWindowNotClosable,
  412.             eWindowNotZoomable,eWindowNotResizable,DialogLeftEdge(WINXSIZE),
  413.             DialogTopEdge(WINYSIZE),WINXSIZE,WINYSIZE,(void (*)(void*))&UpdateTheWindow,Window);
  414.         if (Window->ScreenID == NIL)
  415.             {
  416.              FailurePoint2:
  417.                 ReleasePtr((char*)Window);
  418.                 goto FailurePoint1;
  419.             }
  420.         SetWindowName(Window->ScreenID,"Edit Track Defaults");
  421.  
  422.         Window->NameEdit = NewTextEdit(Window->ScreenID,eTENoScrollBars,GetScreenFont(),9,
  423.             NAMEEDITX,NAMEEDITY,NAMEEDITWIDTH,NAMEEDITHEIGHT);
  424.         if (Window->NameEdit == NIL)
  425.             {
  426.              FailurePoint3:
  427.                 KillWindow(Window->ScreenID);
  428.                 goto FailurePoint2;
  429.             }
  430.         StringTemp = TrackObjectGetNameCopy(TheTrackThing);
  431.         if (StringTemp == NIL)
  432.             {
  433.              FailurePoint4:
  434.                 DisposeTextEdit(Window->NameEdit);
  435.                 goto FailurePoint3;
  436.             }
  437.         TextEditNewRawData(Window->NameEdit,StringTemp,SYSTEMLINEFEED);
  438.         ReleasePtr(StringTemp);
  439.         TextEditHasBeenSaved(Window->NameEdit);
  440.  
  441.         Window->InstrumentEdit = NewTextEdit(Window->ScreenID,eTENoScrollBars,
  442.             GetScreenFont(),9,INSTREDITX,INSTREDITY,INSTREDITWIDTH,INSTREDITHEIGHT);
  443.         if (Window->InstrumentEdit == NIL)
  444.             {
  445.              FailurePoint5:
  446.                 goto FailurePoint4;
  447.             }
  448.         StringTemp = TrackObjectGetInstrName(TheTrackThing);
  449.         if (StringTemp == NIL)
  450.             {
  451.              FailurePoint6:
  452.                 DisposeTextEdit(Window->InstrumentEdit);
  453.                 goto FailurePoint5;
  454.             }
  455.         TextEditNewRawData(Window->InstrumentEdit,StringTemp,SYSTEMLINEFEED);
  456.         ReleasePtr(StringTemp);
  457.         TextEditHasBeenSaved(Window->InstrumentEdit);
  458.  
  459.         Window->OKButton = NewSimpleButton(Window->ScreenID,"OK",OKBUTTONX,OKBUTTONY,
  460.             OKBUTTONWIDTH,OKBUTTONHEIGHT);
  461.         if (Window->OKButton == NIL)
  462.             {
  463.              FailurePoint7:
  464.                 goto FailurePoint6;
  465.             }
  466.         SetDefaultButtonState(Window->OKButton,True);
  467.  
  468.         Window->CancelButton = NewSimpleButton(Window->ScreenID,"Cancel",CANCELBUTTONX,
  469.             CANCELBUTTONY,CANCELBUTTONWIDTH,CANCELBUTTONHEIGHT);
  470.         if (Window->CancelButton == NIL)
  471.             {
  472.              FailurePoint8:
  473.                 DisposeSimpleButton(Window->OKButton);
  474.                 goto FailurePoint7;
  475.             }
  476.  
  477.         Window->EarlyLateAdjustEdit = NewTextEdit(Window->ScreenID,eTENoScrollBars,
  478.             GetScreenFont(),9,EARLYLATEADJUSTEDITX,EARLYLATEADJUSTEDITY,
  479.             EARLYLATEADJUSTEDITWIDTH,EARLYLATEADJUSTEDITHEIGHT);
  480.         if (Window->EarlyLateAdjustEdit == NIL)
  481.             {
  482.              FailurePoint9:
  483.                 DisposeSimpleButton(Window->CancelButton);
  484.                 goto FailurePoint8;
  485.             }
  486.         StringTemp = LongDoubleToString(TrackObjectGetEarlyLateAdjust(TheTrackThing),
  487.             7,1e-4,1e6);
  488.         if (StringTemp == NIL)
  489.             {
  490.              FailurePoint10:
  491.                 DisposeTextEdit(Window->EarlyLateAdjustEdit);
  492.                 goto FailurePoint9;
  493.             }
  494.         TextEditNewRawData(Window->EarlyLateAdjustEdit,StringTemp,SYSTEMLINEFEED);
  495.         ReleasePtr(StringTemp);
  496.         TextEditHasBeenSaved(Window->EarlyLateAdjustEdit);
  497.  
  498.         Window->ReleasePoint1Edit = NewTextEdit(Window->ScreenID,eTENoScrollBars,
  499.             GetScreenFont(),9,RELEASEPOINT1EDITX,RELEASEPOINT1EDITY,RELEASEPOINT1WIDTH,
  500.             RELEASEPOINT1HEIGHT);
  501.         if (Window->ReleasePoint1Edit == NIL)
  502.             {
  503.              FailurePoint11:
  504.                 goto FailurePoint10;
  505.             }
  506.         StringTemp = LongDoubleToString(TrackObjectGetReleasePoint1(TheTrackThing),
  507.             7,1e-4,1e6);
  508.         if (StringTemp == NIL)
  509.             {
  510.              FailurePoint12:
  511.                 DisposeTextEdit(Window->ReleasePoint1Edit);
  512.                 goto FailurePoint11;
  513.             }
  514.         TextEditNewRawData(Window->ReleasePoint1Edit,StringTemp,SYSTEMLINEFEED);
  515.         ReleasePtr(StringTemp);
  516.         TextEditHasBeenSaved(Window->ReleasePoint1Edit);
  517.  
  518.         Window->ReleasePoint1StartButton = NewRadioButton(Window->ScreenID,"Start",
  519.             RELEASEPOINT1STARTBUTTONX,RELEASEPOINT1STARTBUTTONY,RELEASEPOINT1STARTBUTTONWIDTH,
  520.             RELEASEPOINT1STARTBUTTONHEIGHT);
  521.         if (Window->ReleasePoint1StartButton == NIL)
  522.             {
  523.              FailurePoint13:
  524.                 goto FailurePoint12;
  525.             }
  526.  
  527.         Window->ReleasePoint1EndButton = NewRadioButton(Window->ScreenID,"End",
  528.             RELEASEPOINT1ENDBUTTONX,RELEASEPOINT1ENDBUTTONY,RELEASEPOINT1ENDBUTTONWIDTH,
  529.             RELEASEPOINT1ENDBUTTONHEIGHT);
  530.         if (Window->ReleasePoint1EndButton == NIL)
  531.             {
  532.              FailurePoint14:
  533.                 DisposeRadioButton(Window->ReleasePoint1StartButton);
  534.                 goto FailurePoint13;
  535.             }
  536.  
  537.         switch (TrackObjectGetReleasePoint1StartEndFlag(TheTrackThing))
  538.             {
  539.                 default:
  540.                     EXECUTE(PRERR(AllowResume,
  541.                         "TrackAttributeDialog:  bad release point 1 start/end flag"));
  542.                     break;
  543.                 case eRelease1FromStart:
  544.                     SetRadioButtonState(Window->ReleasePoint1StartButton,True);
  545.                     break;
  546.                 case eRelease1FromEnd:
  547.                     SetRadioButtonState(Window->ReleasePoint1EndButton,True);
  548.                     break;
  549.             }
  550.  
  551.         Window->LoudnessEdit = NewTextEdit(Window->ScreenID,eTENoScrollBars,GetScreenFont(),
  552.             9,LOUDNESSEDITX,LOUDNESSEDITY,LOUDNESSEDITWIDTH,LOUDNESSEDITHEIGHT);
  553.         if (Window->LoudnessEdit == NIL)
  554.             {
  555.              FailurePoint15:
  556.                 DisposeRadioButton(Window->ReleasePoint1EndButton);
  557.                 goto FailurePoint14;
  558.             }
  559.         StringTemp = LongDoubleToString(TrackObjectGetOverallLoudness(TheTrackThing),
  560.             7,1e-4,1e6);
  561.         if (StringTemp == NIL)
  562.             {
  563.              FailurePoint16:
  564.                 DisposeTextEdit(Window->LoudnessEdit);
  565.                 goto FailurePoint15;
  566.             }
  567.         TextEditNewRawData(Window->LoudnessEdit,StringTemp,SYSTEMLINEFEED);
  568.         ReleasePtr(StringTemp);
  569.         TextEditHasBeenSaved(Window->LoudnessEdit);
  570.  
  571.         Window->ReleasePoint2Edit = NewTextEdit(Window->ScreenID,eTENoScrollBars,
  572.             GetScreenFont(),9,RELEASEPOINT2EDITX,RELEASEPOINT2EDITY,RELEASEPOINT2EDITWIDTH,
  573.             RELEASEPOINT2EDITHEIGHT);
  574.         if (Window->ReleasePoint2Edit == NIL)
  575.             {
  576.              FailurePoint17:
  577.                 goto FailurePoint16;
  578.             }
  579.         StringTemp = LongDoubleToString(TrackObjectGetReleasePoint2(TheTrackThing),
  580.             7,1e-4,1e6);
  581.         if (StringTemp == NIL)
  582.             {
  583.              FailurePoint18:
  584.                 DisposeTextEdit(Window->ReleasePoint2Edit);
  585.                 goto FailurePoint17;
  586.             }
  587.         TextEditNewRawData(Window->ReleasePoint2Edit,StringTemp,SYSTEMLINEFEED);
  588.         ReleasePtr(StringTemp);
  589.         TextEditHasBeenSaved(Window->ReleasePoint2Edit);
  590.  
  591.         Window->ReleasePoint2StartButton = NewRadioButton(Window->ScreenID,"Start",
  592.             RELEASEPOINT2STARTBUTTONX,RELEASEPOINT2STARTBUTTONY,RELEASEPOINT2STARTBUTTONWIDTH,
  593.             RELEASEPOINT2STARTBUTTONHEIGHT);
  594.         if (Window->ReleasePoint2StartButton == NIL)
  595.             {
  596.              FailurePoint19:
  597.                 goto FailurePoint18;
  598.             }
  599.  
  600.         Window->ReleasePoint2EndButton = NewRadioButton(Window->ScreenID,"End",
  601.             RELEASEPOINT2ENDBUTTONX,RELEASEPOINT2ENDBUTTONY,RELEASEPOINT2ENDBUTTONWIDTH,
  602.             RELEASEPOINT2ENDBUTTONHEIGHT);
  603.         if (Window->ReleasePoint2EndButton == NIL)
  604.             {
  605.              FailurePoint20:
  606.                 DisposeRadioButton(Window->ReleasePoint2StartButton);
  607.                 goto FailurePoint19;
  608.             }
  609.  
  610.         switch (TrackObjectGetReleasePoint2StartEndFlag(TheTrackThing))
  611.             {
  612.                 default:
  613.                     EXECUTE(PRERR(AllowResume,
  614.                         "TrackAttributeDialog:  bad release point 2 start/end flag"));
  615.                     break;
  616.                 case eRelease2FromStart:
  617.                     SetRadioButtonState(Window->ReleasePoint2StartButton,True);
  618.                     break;
  619.                 case eRelease2FromEnd:
  620.                     SetRadioButtonState(Window->ReleasePoint2EndButton,True);
  621.                     break;
  622.             }
  623.  
  624.         Window->Accent1Edit = NewTextEdit(Window->ScreenID,eTENoScrollBars,GetScreenFont(),
  625.             9,ACCENT1EDITX,ACCENT1EDITY,ACCENT1EDITWIDTH,ACCENT1EDITHEIGHT);
  626.         if (Window->Accent1Edit == NIL)
  627.             {
  628.              FailurePoint21:
  629.                 DisposeRadioButton(Window->ReleasePoint2EndButton);
  630.                 goto FailurePoint20;
  631.             }
  632.         StringTemp = LongDoubleToString(TrackObjectGetAccent1(TheTrackThing),7,1e-4,1e6);
  633.         if (StringTemp == NIL)
  634.             {
  635.              FailurePoint22:
  636.                 DisposeTextEdit(Window->Accent1Edit);
  637.                 goto FailurePoint21;
  638.             }
  639.         TextEditNewRawData(Window->Accent1Edit,StringTemp,SYSTEMLINEFEED);
  640.         ReleasePtr(StringTemp);
  641.         TextEditHasBeenSaved(Window->Accent1Edit);
  642.  
  643.         Window->Accent2Edit = NewTextEdit(Window->ScreenID,eTENoScrollBars,GetScreenFont(),
  644.             9,ACCENT2EDITX,ACCENT2EDITY,ACCENT2EDITWIDTH,ACCENT2EDITHEIGHT);
  645.         if (Window->Accent2Edit == NIL)
  646.             {
  647.              FailurePoint23:
  648.                 goto FailurePoint22;
  649.             }
  650.         StringTemp = LongDoubleToString(TrackObjectGetAccent2(TheTrackThing),7,1e-4,1e6);
  651.         if (StringTemp == NIL)
  652.             {
  653.              FailurePoint24:
  654.                 DisposeTextEdit(Window->Accent2Edit);
  655.                 goto FailurePoint23;
  656.             }
  657.         TextEditNewRawData(Window->Accent2Edit,StringTemp,SYSTEMLINEFEED);
  658.         ReleasePtr(StringTemp);
  659.         TextEditHasBeenSaved(Window->Accent2Edit);
  660.  
  661.         Window->Accent3Edit = NewTextEdit(Window->ScreenID,eTENoScrollBars,GetScreenFont(),
  662.             9,ACCENT3EDITX,ACCENT3EDITY,ACCENT3EDITWIDTH,ACCENT3EDITHEIGHT);
  663.         if (Window->Accent3Edit == NIL)
  664.             {
  665.              FailurePoint25:
  666.                 goto FailurePoint24;
  667.             }
  668.         StringTemp = LongDoubleToString(TrackObjectGetAccent3(TheTrackThing),7,1e-4,1e6);
  669.         if (StringTemp == NIL)
  670.             {
  671.              FailurePoint26:
  672.                 DisposeTextEdit(Window->Accent3Edit);
  673.                 goto FailurePoint25;
  674.             }
  675.         TextEditNewRawData(Window->Accent3Edit,StringTemp,SYSTEMLINEFEED);
  676.         ReleasePtr(StringTemp);
  677.         TextEditHasBeenSaved(Window->Accent3Edit);
  678.  
  679.         Window->Accent4Edit = NewTextEdit(Window->ScreenID,eTENoScrollBars,GetScreenFont(),
  680.             9,ACCENT4EDITX,ACCENT4EDITY,ACCENT4EDITWIDTH,ACCENT4EDITHEIGHT);
  681.         if (Window->Accent4Edit == NIL)
  682.             {
  683.              FailurePoint27:
  684.                 goto FailurePoint26;
  685.             }
  686.         StringTemp = LongDoubleToString(TrackObjectGetAccent4(TheTrackThing),7,1e-4,1e6);
  687.         if (StringTemp == NIL)
  688.             {
  689.              FailurePoint28:
  690.                 DisposeTextEdit(Window->Accent4Edit);
  691.                 goto FailurePoint27;
  692.             }
  693.         TextEditNewRawData(Window->Accent4Edit,StringTemp,SYSTEMLINEFEED);
  694.         ReleasePtr(StringTemp);
  695.         TextEditHasBeenSaved(Window->Accent4Edit);
  696.  
  697.         Window->PitchDispRateEdit = NewTextEdit(Window->ScreenID,eTENoScrollBars,
  698.             GetScreenFont(),9,PITCHDISPRATEEDITX,PITCHDISPRATEEDITY,PITCHDISPRATEEDITWIDTH,
  699.             PITCHDISPRATEEDITHEIGHT);
  700.         if (Window->PitchDispRateEdit == NIL)
  701.             {
  702.              FailurePoint29:
  703.                 goto FailurePoint28;
  704.             }
  705.         StringTemp = LongDoubleToString(TrackObjectGetPitchDisplacementRateAdjust(
  706.             TheTrackThing),7,1e-4,1e6);
  707.         if (StringTemp == NIL)
  708.             {
  709.              FailurePoint30:
  710.                 DisposeTextEdit(Window->PitchDispRateEdit);
  711.                 goto FailurePoint29;
  712.             }
  713.         TextEditNewRawData(Window->PitchDispRateEdit,StringTemp,SYSTEMLINEFEED);
  714.         ReleasePtr(StringTemp);
  715.         TextEditHasBeenSaved(Window->PitchDispRateEdit);
  716.  
  717.         Window->PitchDispDepthEdit = NewTextEdit(Window->ScreenID,eTENoScrollBars,
  718.             GetScreenFont(),9,PITCHDISPDEPTHEDITX,PITCHDISPDEPTHEDITY,PITCHDISPDEPTHEDITWIDTH,
  719.             PITCHDISPDEPTHEDITHEIGHT);
  720.         if (Window->PitchDispDepthEdit == NIL)
  721.             {
  722.              FailurePoint31:
  723.                 goto FailurePoint30;
  724.             }
  725.         StringTemp = LongDoubleToString(TrackObjectGetPitchDisplacementDepthAdjust(
  726.             TheTrackThing),7,1e-4,1e6);
  727.         if (StringTemp == NIL)
  728.             {
  729.              FailurePoint32:
  730.                 DisposeTextEdit(Window->PitchDispDepthEdit);
  731.                 goto FailurePoint31;
  732.             }
  733.         TextEditNewRawData(Window->PitchDispDepthEdit,StringTemp,SYSTEMLINEFEED);
  734.         ReleasePtr(StringTemp);
  735.         TextEditHasBeenSaved(Window->PitchDispDepthEdit);
  736.  
  737.         Window->PitchDispDepthHertzButton = NewRadioButton(Window->ScreenID,"Hertz",
  738.             PITCHDISPDEPTHHERTZBUTTONX,PITCHDISPDEPTHHERTZBUTTONY,
  739.             PITCHDISPDEPTHHERTZBUTTONWIDTH,PITCHDISPDEPTHHERTZBUTTONHEIGHT);
  740.         if (Window->PitchDispDepthHertzButton == NIL)
  741.             {
  742.              FailurePoint33:
  743.                 goto FailurePoint32;
  744.             }
  745.  
  746.         Window->PitchDispDepthHalfStepButton = NewRadioButton(Window->ScreenID,"Halfsteps",
  747.             PITCHDISPDEPTHHALFSTEPBUTTONX,PITCHDISPDEPTHHALFSTEPBUTTONY,
  748.             PITCHDISPDEPTHHALFSTEPBUTTONWIDTH,PITCHDISPDEPTHHALFSTEPBUTTONHEIGHT);
  749.         if (Window->PitchDispDepthHalfStepButton == NIL)
  750.             {
  751.              FailurePoint34:
  752.                 DisposeRadioButton(Window->PitchDispDepthHertzButton);
  753.                 goto FailurePoint33;
  754.             }
  755.  
  756.         switch (TrackObjectGetPitchDisplacementDepthControlFlag(TheTrackThing))
  757.             {
  758.                 default:
  759.                     EXECUTE(PRERR(AllowResume,
  760.                         "TrackAttributeDialog:  bad pitch displacement depth control flag"));
  761.                     break;
  762.                 case ePitchDisplacementDepthModeHertz:
  763.                     SetRadioButtonState(Window->PitchDispDepthHertzButton,True);
  764.                     break;
  765.                 case ePitchDisplacementDepthModeHalfSteps:
  766.                     SetRadioButtonState(Window->PitchDispDepthHalfStepButton,True);
  767.                     break;
  768.             }
  769.  
  770.         Window->HurryUpEdit = NewTextEdit(Window->ScreenID,eTENoScrollBars,GetScreenFont(),
  771.             9,HURRYUPEDITX,HURRYUPEDITY,HURRYUPEDITWIDTH,HURRYUPEDITHEIGHT);
  772.         if (Window->HurryUpEdit == NIL)
  773.             {
  774.              FailurePoint35:
  775.                 DisposeRadioButton(Window->PitchDispDepthHalfStepButton);
  776.                 goto FailurePoint34;
  777.             }
  778.         StringTemp = LongDoubleToString(TrackObjectGetHurryUp(TheTrackThing),7,1e-4,1e6);
  779.         if (StringTemp == NIL)
  780.             {
  781.              FailurePoint36:
  782.                 DisposeTextEdit(Window->HurryUpEdit);
  783.                 goto FailurePoint35;
  784.             }
  785.         TextEditNewRawData(Window->HurryUpEdit,StringTemp,SYSTEMLINEFEED);
  786.         ReleasePtr(StringTemp);
  787.         TextEditHasBeenSaved(Window->HurryUpEdit);
  788.  
  789.         Window->PitchDispStartEdit = NewTextEdit(Window->ScreenID,eTENoScrollBars,
  790.             GetScreenFont(),9,PITCHDISPSTARTEDITX,PITCHDISPSTARTEDITY,PITCHDISPSTARTEDITWIDTH,
  791.             PITCHDISPSTARTEDITHEIGHT);
  792.         if (Window->PitchDispStartEdit == NIL)
  793.             {
  794.              FailurePoint37:
  795.                 goto FailurePoint36;
  796.             }
  797.         StringTemp = LongDoubleToString(TrackObjectGetPitchDisplacementStartPoint(
  798.             TheTrackThing),7,1e-4,1e6);
  799.         if (StringTemp == NIL)
  800.             {
  801.              FailurePoint38:
  802.                 DisposeTextEdit(Window->PitchDispStartEdit);
  803.                 goto FailurePoint37;
  804.             }
  805.         TextEditNewRawData(Window->PitchDispStartEdit,StringTemp,SYSTEMLINEFEED);
  806.         ReleasePtr(StringTemp);
  807.         TextEditHasBeenSaved(Window->PitchDispStartEdit);
  808.  
  809.         Window->PitchDispStartStartButton = NewRadioButton(Window->ScreenID,"Start",
  810.             PITCHDISPSTARTSTARTBUTTONX,PITCHDISPSTARTSTARTBUTTONY,
  811.             PITCHDISPSTARTSTARTBUTTONWIDTH,PITCHDISPSTARTSTARTBUTTONHEIGHT);
  812.         if (Window->PitchDispStartStartButton == NIL)
  813.             {
  814.              FailurePoint39:
  815.                 goto FailurePoint38;
  816.             }
  817.  
  818.         Window->PitchDispStartEndButton = NewRadioButton(Window->ScreenID,"End",
  819.             PITCHDISPSTARTENDBUTTONX,PITCHDISPSTARTENDBUTTONY,PITCHDISPSTARTENDBUTTONWIDTH,
  820.             PITCHDISPSTARTENDBUTTONHEIGHT);
  821.         if (Window->PitchDispStartEndButton == NIL)
  822.             {
  823.              FailurePoint40:
  824.                 DisposeRadioButton(Window->PitchDispStartStartButton);
  825.                 goto FailurePoint39;
  826.             }
  827.  
  828.         switch (TrackObjectGetPitchDisplacementFromStartOrEnd(TheTrackThing))
  829.             {
  830.                 default:
  831.                     EXECUTE(PRERR(AllowResume,
  832.                         "TrackAttributeDialog:  bad pitch displacement start/end flag"));
  833.                     break;
  834.                 case ePitchDisplacementStartFromStart:
  835.                     SetRadioButtonState(Window->PitchDispStartStartButton,True);
  836.                     break;
  837.                 case ePitchDisplacementStartFromEnd:
  838.                     SetRadioButtonState(Window->PitchDispStartEndButton,True);
  839.                     break;
  840.             }
  841.  
  842.         Window->DetuneEdit = NewTextEdit(Window->ScreenID,eTENoScrollBars,GetScreenFont(),
  843.             9,DETUNEEDITX,DETUNEEDITY,DETUNEEDITWIDTH,DETUNEEDITHEIGHT);
  844.         if (Window->DetuneEdit == NIL)
  845.             {
  846.              FailurePoint41:
  847.                 DisposeRadioButton(Window->PitchDispStartEndButton);
  848.                 goto FailurePoint40;
  849.             }
  850.         StringTemp = LongDoubleToString(TrackObjectGetDetune(TheTrackThing),7,1e-4,1e6);
  851.         if (StringTemp == NIL)
  852.             {
  853.              FailurePoint42:
  854.                 DisposeTextEdit(Window->DetuneEdit);
  855.                 goto FailurePoint41;
  856.             }
  857.         TextEditNewRawData(Window->DetuneEdit,StringTemp,SYSTEMLINEFEED);
  858.         ReleasePtr(StringTemp);
  859.         TextEditHasBeenSaved(Window->DetuneEdit);
  860.  
  861.         Window->DetuneHertzButton = NewRadioButton(Window->ScreenID,"Hertz",
  862.             DETUNEHERTZBUTTONX,DETUNEHERTZBUTTONY,DETUNEHERTZBUTTONWIDTH,
  863.             DETUNEHERTZBUTTONHEIGHT);
  864.         if (Window->DetuneHertzButton == NIL)
  865.             {
  866.              FailurePoint43:
  867.                 goto FailurePoint42;
  868.             }
  869.  
  870.         Window->DetuneHalfStepButton = NewRadioButton(Window->ScreenID,"Halfsteps",
  871.             DETUNEHALFSTEPBUTTONX,DETUNEHALFSTEPBUTTONY,DETUNEHALFSTEPBUTTONWIDTH,
  872.             DETUNEHALFSTEPBUTTONHEIGHT);
  873.         if (Window->DetuneHalfStepButton == NIL)
  874.             {
  875.              FailurePoint44:
  876.                 DisposeRadioButton(Window->DetuneHertzButton);
  877.                 goto FailurePoint43;
  878.             }
  879.  
  880.         switch (TrackObjectGetDetuneControlFlag(TheTrackThing))
  881.             {
  882.                 default:
  883.                     EXECUTE(PRERR(AllowResume,
  884.                         "TrackAttributeDialog:  bad detune pitch conversion flag"));
  885.                     break;
  886.                 case eDetuningModeHertz:
  887.                     SetRadioButtonState(Window->DetuneHertzButton,True);
  888.                     break;
  889.                 case eDetuningModeHalfSteps:
  890.                     SetRadioButtonState(Window->DetuneHalfStepButton,True);
  891.                     break;
  892.             }
  893.  
  894.         Window->StereoPositionEdit = NewTextEdit(Window->ScreenID,eTENoScrollBars,
  895.             GetScreenFont(),9,STEREOPOSITIONEDITX,STEREOPOSITIONEDITY,STEREOPOSITIONEDITWIDTH,
  896.             STEREOPOSITIONEDITHEIGHT);
  897.         if (Window->StereoPositionEdit == NIL)
  898.             {
  899.              FailurePoint45:
  900.                 DisposeRadioButton(Window->DetuneHalfStepButton);
  901.                 goto FailurePoint44;
  902.             }
  903.         StringTemp = LongDoubleToString(TrackObjectGetStereoPositioning(TheTrackThing),
  904.             7,1e-4,1e6);
  905.         if (StringTemp == NIL)
  906.             {
  907.              FailurePoint46:
  908.                 DisposeTextEdit(Window->StereoPositionEdit);
  909.                 goto FailurePoint45;
  910.             }
  911.         TextEditNewRawData(Window->StereoPositionEdit,StringTemp,SYSTEMLINEFEED);
  912.         ReleasePtr(StringTemp);
  913.         TextEditHasBeenSaved(Window->StereoPositionEdit);
  914.  
  915.         Window->DurationEdit = NewTextEdit(Window->ScreenID,eTENoScrollBars,GetScreenFont(),
  916.             9,DURATIONEDITX,DURATIONEDITY,DURATIONEDITWIDTH,DURATIONEDITHEIGHT);
  917.         if (Window->DurationEdit == NIL)
  918.             {
  919.              FailurePoint47:
  920.                 goto FailurePoint46;
  921.             }
  922.         StringTemp = LongDoubleToString(TrackObjectGetDurationAdjust(TheTrackThing),
  923.             7,1e-4,1e6);
  924.         if (StringTemp == NIL)
  925.             {
  926.              FailurePoint48:
  927.                 DisposeTextEdit(Window->DurationEdit);
  928.                 goto FailurePoint47;
  929.             }
  930.         TextEditNewRawData(Window->DurationEdit,StringTemp,SYSTEMLINEFEED);
  931.         ReleasePtr(StringTemp);
  932.         TextEditHasBeenSaved(Window->DurationEdit);
  933.  
  934.         Window->DurationAddButton = NewRadioButton(Window->ScreenID,"Add",
  935.             DURATIONADDBUTTONX,DURATIONADDBUTTONY,DURATIONADDBUTTONWIDTH,
  936.             DURATIONADDBUTTONHEIGHT);
  937.         if (Window->DurationAddButton == NIL)
  938.             {
  939.              FailurePoint49:
  940.                 goto FailurePoint48;
  941.             }
  942.  
  943.         Window->DurationMultButton = NewRadioButton(Window->ScreenID,"Mult",
  944.             DURATIONMULTBUTTONX,DURATIONMULTBUTTONY,DURATIONMULTBUTTONWIDTH,
  945.             DURATIONMULTBUTTONHEIGHT);
  946.         if (Window->DurationMultButton == NIL)
  947.             {
  948.              FailurePoint50:
  949.                 DisposeRadioButton(Window->DurationAddButton);
  950.                 goto FailurePoint49;
  951.             }
  952.  
  953.         switch (TrackObjectGetDurationModeFlag(TheTrackThing))
  954.             {
  955.                 default:
  956.                     EXECUTE(PRERR(AllowResume,
  957.                         "TrackAttributeDialog:  bad duration mode flag"));
  958.                     break;
  959.                 case eDurationAdjustAdditive:
  960.                     SetRadioButtonState(Window->DurationAddButton,True);
  961.                     break;
  962.                 case eDurationAdjustMultiplicative:
  963.                     SetRadioButtonState(Window->DurationMultButton,True);
  964.                     break;
  965.             }
  966.  
  967.  
  968.         Window->SurroundEdit = NewTextEdit(Window->ScreenID,eTENoScrollBars,
  969.             GetScreenFont(),9,SURROUNDPOSITIONEDITX,SURROUNDPOSITIONEDITY,
  970.             SURROUNDPOSITIONEDITWIDTH,SURROUNDPOSITIONEDITHEIGHT);
  971.         if (Window->SurroundEdit == NIL)
  972.             {
  973.              FailurePoint51:
  974.                 DisposeRadioButton(Window->DurationMultButton);
  975.                 goto FailurePoint50;
  976.             }
  977.         StringTemp = LongDoubleToString(TrackObjectGetSurroundPositioning(TheTrackThing),
  978.             7,1e-4,1e6);
  979.         if (StringTemp == NIL)
  980.             {
  981.              FailurePoint52:
  982.                 DisposeTextEdit(Window->SurroundEdit);
  983.                 goto FailurePoint51;
  984.             }
  985.         TextEditNewRawData(Window->SurroundEdit,StringTemp,SYSTEMLINEFEED);
  986.         ReleasePtr(StringTemp);
  987.         TextEditHasBeenSaved(Window->SurroundEdit);
  988.  
  989.  
  990.         ActiveTextEdit = Window->NameEdit;
  991.         EnableTextEditSelection(ActiveTextEdit);
  992.         TextEditDoMenuSelectAll(ActiveTextEdit);
  993.         LoopFlag = True;
  994.         while (LoopFlag)
  995.             {
  996.                 OrdType                            X;
  997.                 OrdType                            Y;
  998.                 ModifierFlags                Modifiers;
  999.                 MenuItemType*                MenuItem;
  1000.                 char                                KeyPress;
  1001.  
  1002.                 switch (GetAnEvent(&X,&Y,&Modifiers,NIL,&MenuItem,&KeyPress))
  1003.                     {
  1004.                         default:
  1005.                             break;
  1006.                         case eCheckCursor:
  1007.                             if (TextEditIBeamTest(Window->NameEdit,X,Y)
  1008.                                 || TextEditIBeamTest(Window->InstrumentEdit,X,Y)
  1009.                                 || TextEditIBeamTest(Window->EarlyLateAdjustEdit,X,Y)
  1010.                                 || TextEditIBeamTest(Window->ReleasePoint1Edit,X,Y)
  1011.                                 || TextEditIBeamTest(Window->LoudnessEdit,X,Y)
  1012.                                 || TextEditIBeamTest(Window->ReleasePoint2Edit,X,Y)
  1013.                                 || TextEditIBeamTest(Window->Accent1Edit,X,Y)
  1014.                                 || TextEditIBeamTest(Window->Accent2Edit,X,Y)
  1015.                                 || TextEditIBeamTest(Window->Accent3Edit,X,Y)
  1016.                                 || TextEditIBeamTest(Window->Accent4Edit,X,Y)
  1017.                                 || TextEditIBeamTest(Window->PitchDispRateEdit,X,Y)
  1018.                                 || TextEditIBeamTest(Window->PitchDispDepthEdit,X,Y)
  1019.                                 || TextEditIBeamTest(Window->HurryUpEdit,X,Y)
  1020.                                 || TextEditIBeamTest(Window->PitchDispStartEdit,X,Y)
  1021.                                 || TextEditIBeamTest(Window->DetuneEdit,X,Y)
  1022.                                 || TextEditIBeamTest(Window->StereoPositionEdit,X,Y)
  1023.                                 || TextEditIBeamTest(Window->SurroundEdit,X,Y)
  1024.                                 || TextEditIBeamTest(Window->DurationEdit,X,Y))
  1025.                                 {
  1026.                                     SetIBeamCursor();
  1027.                                 }
  1028.                              else
  1029.                                 {
  1030.                                     SetArrowCursor();
  1031.                                 }
  1032.                             goto UpdateCursorPoint;
  1033.                             break;
  1034.                         case eNoEvent:
  1035.                          UpdateCursorPoint:
  1036.                             TextEditUpdateCursor(ActiveTextEdit);
  1037.                             break;
  1038.                         case eMenuStarting:
  1039.                             EnableMenuItem(mPaste);
  1040.                             if (TextEditIsThereValidSelection(ActiveTextEdit))
  1041.                                 {
  1042.                                     EnableMenuItem(mCut);
  1043.                                     EnableMenuItem(mCopy);
  1044.                                     EnableMenuItem(mClear);
  1045.                                 }
  1046.                             EnableMenuItem(mSelectAll);
  1047.                             if (TextEditCanWeUndo(ActiveTextEdit))
  1048.                                 {
  1049.                                     EnableMenuItem(mUndo);
  1050.                                 }
  1051.                             break;
  1052.                         case eMenuCommand:
  1053.                             if (MenuItem == mPaste)
  1054.                                 {
  1055.                                     TextEditDoMenuPaste(ActiveTextEdit);
  1056.                                 }
  1057.                             else if (MenuItem == mCut)
  1058.                                 {
  1059.                                     TextEditDoMenuCut(ActiveTextEdit);
  1060.                                 }
  1061.                             else if (MenuItem == mCopy)
  1062.                                 {
  1063.                                     TextEditDoMenuCopy(ActiveTextEdit);
  1064.                                 }
  1065.                             else if (MenuItem == mClear)
  1066.                                 {
  1067.                                     TextEditDoMenuClear(ActiveTextEdit);
  1068.                                 }
  1069.                             else if (MenuItem == mUndo)
  1070.                                 {
  1071.                                     TextEditDoMenuUndo(ActiveTextEdit);
  1072.                                     TextEditShowSelection(ActiveTextEdit);
  1073.                                 }
  1074.                             else if (MenuItem == mSelectAll)
  1075.                                 {
  1076.                                     TextEditDoMenuSelectAll(ActiveTextEdit);
  1077.                                 }
  1078.                             else
  1079.                                 {
  1080.                                     EXECUTE(PRERR(AllowResume,
  1081.                                         "TrackAttributeDialog: Undefined menu option chosen"));
  1082.                                 }
  1083.                             break;
  1084.                         case eKeyPressed:
  1085.                             if (KeyPress == 13)
  1086.                                 {
  1087.                                     FlashButton(Window->OKButton);
  1088.                                     DoItFlag = True;
  1089.                                     LoopFlag = False;
  1090.                                 }
  1091.                             else if (KeyPress == 9)
  1092.                                 {
  1093.                                     DisableTextEditSelection(ActiveTextEdit);
  1094.                                     if ((eShiftKey & Modifiers) == 0)
  1095.                                         {
  1096.                                             /* tab forwards */
  1097.                                             if (ActiveTextEdit == Window->NameEdit)
  1098.                                                 {
  1099.                                                     ActiveTextEdit = Window->InstrumentEdit;
  1100.                                                 }
  1101.                                             else if (ActiveTextEdit == Window->InstrumentEdit)
  1102.                                                 {
  1103.                                                     ActiveTextEdit = Window->EarlyLateAdjustEdit;
  1104.                                                 }
  1105.                                             else if (ActiveTextEdit == Window->EarlyLateAdjustEdit)
  1106.                                                 {
  1107.                                                     ActiveTextEdit = Window->ReleasePoint1Edit;
  1108.                                                 }
  1109.                                             else if (ActiveTextEdit == Window->ReleasePoint1Edit)
  1110.                                                 {
  1111.                                                     ActiveTextEdit = Window->LoudnessEdit;
  1112.                                                 }
  1113.                                             else if (ActiveTextEdit == Window->LoudnessEdit)
  1114.                                                 {
  1115.                                                     ActiveTextEdit = Window->ReleasePoint2Edit;
  1116.                                                 }
  1117.                                             else if (ActiveTextEdit == Window->ReleasePoint2Edit)
  1118.                                                 {
  1119.                                                     ActiveTextEdit = Window->Accent1Edit;
  1120.                                                 }
  1121.                                             else if (ActiveTextEdit == Window->Accent1Edit)
  1122.                                                 {
  1123.                                                     ActiveTextEdit = Window->Accent2Edit;
  1124.                                                 }
  1125.                                             else if (ActiveTextEdit == Window->Accent2Edit)
  1126.                                                 {
  1127.                                                     ActiveTextEdit = Window->Accent3Edit;
  1128.                                                 }
  1129.                                             else if (ActiveTextEdit == Window->Accent3Edit)
  1130.                                                 {
  1131.                                                     ActiveTextEdit = Window->Accent4Edit;
  1132.                                                 }
  1133.                                             else if (ActiveTextEdit == Window->Accent4Edit)
  1134.                                                 {
  1135.                                                     ActiveTextEdit = Window->PitchDispRateEdit;
  1136.                                                 }
  1137.                                             else if (ActiveTextEdit == Window->PitchDispRateEdit)
  1138.                                                 {
  1139.                                                     ActiveTextEdit = Window->PitchDispDepthEdit;
  1140.                                                 }
  1141.                                             else if (ActiveTextEdit == Window->PitchDispDepthEdit)
  1142.                                                 {
  1143.                                                     ActiveTextEdit = Window->HurryUpEdit;
  1144.                                                 }
  1145.                                             else if (ActiveTextEdit == Window->HurryUpEdit)
  1146.                                                 {
  1147.                                                     ActiveTextEdit = Window->PitchDispStartEdit;
  1148.                                                 }
  1149.                                             else if (ActiveTextEdit == Window->PitchDispStartEdit)
  1150.                                                 {
  1151.                                                     ActiveTextEdit = Window->StereoPositionEdit;
  1152.                                                 }
  1153.                                             else if (ActiveTextEdit == Window->StereoPositionEdit)
  1154.                                                 {
  1155.                                                     ActiveTextEdit = Window->DetuneEdit;
  1156.                                                 }
  1157.                                             else if (ActiveTextEdit == Window->DetuneEdit)
  1158.                                                 {
  1159.                                                     ActiveTextEdit = Window->SurroundEdit;
  1160.                                                 }
  1161.                                             else if (ActiveTextEdit == Window->SurroundEdit)
  1162.                                                 {
  1163.                                                     ActiveTextEdit = Window->DurationEdit;
  1164.                                                 }
  1165.                                             else
  1166.                                                 {
  1167.                                                     ActiveTextEdit = Window->NameEdit;
  1168.                                                 }
  1169.                                         }
  1170.                                      else
  1171.                                         {
  1172.                                             /* tab backwards */
  1173.                                             if (ActiveTextEdit == Window->DurationEdit)
  1174.                                                 {
  1175.                                                     ActiveTextEdit = Window->SurroundEdit;
  1176.                                                 }
  1177.                                             else if (ActiveTextEdit == Window->SurroundEdit)
  1178.                                                 {
  1179.                                                     ActiveTextEdit = Window->DetuneEdit;
  1180.                                                 }
  1181.                                             else if (ActiveTextEdit == Window->DetuneEdit)
  1182.                                                 {
  1183.                                                     ActiveTextEdit = Window->StereoPositionEdit;
  1184.                                                 }
  1185.                                             else if (ActiveTextEdit == Window->StereoPositionEdit)
  1186.                                                 {
  1187.                                                     ActiveTextEdit = Window->PitchDispStartEdit;
  1188.                                                 }
  1189.                                             else if (ActiveTextEdit == Window->PitchDispStartEdit)
  1190.                                                 {
  1191.                                                     ActiveTextEdit = Window->HurryUpEdit;
  1192.                                                 }
  1193.                                             else if (ActiveTextEdit == Window->HurryUpEdit)
  1194.                                                 {
  1195.                                                     ActiveTextEdit = Window->PitchDispDepthEdit;
  1196.                                                 }
  1197.                                             else if (ActiveTextEdit == Window->PitchDispDepthEdit)
  1198.                                                 {
  1199.                                                     ActiveTextEdit = Window->PitchDispRateEdit;
  1200.                                                 }
  1201.                                             else if (ActiveTextEdit == Window->PitchDispRateEdit)
  1202.                                                 {
  1203.                                                     ActiveTextEdit = Window->Accent4Edit;
  1204.                                                 }
  1205.                                             else if (ActiveTextEdit == Window->Accent4Edit)
  1206.                                                 {
  1207.                                                     ActiveTextEdit = Window->Accent3Edit;
  1208.                                                 }
  1209.                                             else if (ActiveTextEdit == Window->Accent3Edit)
  1210.                                                 {
  1211.                                                     ActiveTextEdit = Window->Accent2Edit;
  1212.                                                 }
  1213.                                             else if (ActiveTextEdit == Window->Accent2Edit)
  1214.                                                 {
  1215.                                                     ActiveTextEdit = Window->Accent1Edit;
  1216.                                                 }
  1217.                                             else if (ActiveTextEdit == Window->Accent1Edit)
  1218.                                                 {
  1219.                                                     ActiveTextEdit = Window->ReleasePoint2Edit;
  1220.                                                 }
  1221.                                             else if (ActiveTextEdit == Window->ReleasePoint2Edit)
  1222.                                                 {
  1223.                                                     ActiveTextEdit = Window->LoudnessEdit;
  1224.                                                 }
  1225.                                             else if (ActiveTextEdit == Window->LoudnessEdit)
  1226.                                                 {
  1227.                                                     ActiveTextEdit = Window->ReleasePoint1Edit;
  1228.                                                 }
  1229.                                             else if (ActiveTextEdit == Window->ReleasePoint1Edit)
  1230.                                                 {
  1231.                                                     ActiveTextEdit = Window->EarlyLateAdjustEdit;
  1232.                                                 }
  1233.                                             else if (ActiveTextEdit == Window->EarlyLateAdjustEdit)
  1234.                                                 {
  1235.                                                     ActiveTextEdit = Window->InstrumentEdit;
  1236.                                                 }
  1237.                                             else if (ActiveTextEdit == Window->InstrumentEdit)
  1238.                                                 {
  1239.                                                     ActiveTextEdit = Window->NameEdit;
  1240.                                                 }
  1241.                                             else
  1242.                                                 {
  1243.                                                     ActiveTextEdit = Window->DurationEdit;
  1244.                                                 }
  1245.                                         }
  1246.                                     TextEditDoMenuSelectAll(ActiveTextEdit);
  1247.                                     EnableTextEditSelection(ActiveTextEdit);
  1248.                                 }
  1249.                             else if (KeyPress == eCancelKey)
  1250.                                 {
  1251.                                     FlashButton(Window->CancelButton);
  1252.                                     DoItFlag = False;
  1253.                                     LoopFlag = False;
  1254.                                 }
  1255.                             else
  1256.                                 {
  1257.                                     TextEditDoKeyPressed(ActiveTextEdit,KeyPress,Modifiers);
  1258.                                 }
  1259.                             break;
  1260.                         case eMouseDown:
  1261.                             if (SimpleButtonHitTest(Window->OKButton,X,Y))
  1262.                                 {
  1263.                                     if (SimpleButtonMouseDown(Window->OKButton,X,Y,NIL,NIL))
  1264.                                         {
  1265.                                             DoItFlag = True;
  1266.                                             LoopFlag = False;
  1267.                                         }
  1268.                                 }
  1269.                             else if (SimpleButtonHitTest(Window->CancelButton,X,Y))
  1270.                                 {
  1271.                                     if (SimpleButtonMouseDown(Window->CancelButton,X,Y,NIL,NIL))
  1272.                                         {
  1273.                                             DoItFlag = False;
  1274.                                             LoopFlag = False;
  1275.                                         }
  1276.                                 }
  1277.                             else if (TextEditHitTest(Window->NameEdit,X,Y))
  1278.                                 {
  1279.                                     if (ActiveTextEdit != Window->NameEdit)
  1280.                                         {
  1281.                                             DisableTextEditSelection(ActiveTextEdit);
  1282.                                             ActiveTextEdit = Window->NameEdit;
  1283.                                             EnableTextEditSelection(ActiveTextEdit);
  1284.                                         }
  1285.                                     TextEditDoMouseDown(ActiveTextEdit,X,Y,Modifiers);
  1286.                                 }
  1287.                             else if (TextEditHitTest(Window->InstrumentEdit,X,Y))
  1288.                                 {
  1289.                                     if (ActiveTextEdit != Window->InstrumentEdit)
  1290.                                         {
  1291.                                             DisableTextEditSelection(ActiveTextEdit);
  1292.                                             ActiveTextEdit = Window->InstrumentEdit;
  1293.                                             EnableTextEditSelection(ActiveTextEdit);
  1294.                                         }
  1295.                                     TextEditDoMouseDown(ActiveTextEdit,X,Y,Modifiers);
  1296.                                 }
  1297.                             else if (TextEditHitTest(Window->EarlyLateAdjustEdit,X,Y))
  1298.                                 {
  1299.                                     if (ActiveTextEdit != Window->EarlyLateAdjustEdit)
  1300.                                         {
  1301.                                             DisableTextEditSelection(ActiveTextEdit);
  1302.                                             ActiveTextEdit = Window->EarlyLateAdjustEdit;
  1303.                                             EnableTextEditSelection(ActiveTextEdit);
  1304.                                         }
  1305.                                     TextEditDoMouseDown(ActiveTextEdit,X,Y,Modifiers);
  1306.                                 }
  1307.                             else if (TextEditHitTest(Window->ReleasePoint1Edit,X,Y))
  1308.                                 {
  1309.                                     if (ActiveTextEdit != Window->ReleasePoint1Edit)
  1310.                                         {
  1311.                                             DisableTextEditSelection(ActiveTextEdit);
  1312.                                             ActiveTextEdit = Window->ReleasePoint1Edit;
  1313.                                             EnableTextEditSelection(ActiveTextEdit);
  1314.                                         }
  1315.                                     TextEditDoMouseDown(ActiveTextEdit,X,Y,Modifiers);
  1316.                                 }
  1317.                             else if (RadioButtonHitTest(Window->ReleasePoint1StartButton,X,Y))
  1318.                                 {
  1319.                                     if (RadioButtonMouseDown(Window->ReleasePoint1StartButton,X,Y))
  1320.                                         {
  1321.                                             SetRadioButtonState(Window->ReleasePoint1EndButton,False);
  1322.                                         }
  1323.                                 }
  1324.                             else if (RadioButtonHitTest(Window->ReleasePoint1EndButton,X,Y))
  1325.                                 {
  1326.                                     if (RadioButtonMouseDown(Window->ReleasePoint1EndButton,X,Y))
  1327.                                         {
  1328.                                             SetRadioButtonState(Window->ReleasePoint1StartButton,False);
  1329.                                         }
  1330.                                 }
  1331.                             else if (TextEditHitTest(Window->LoudnessEdit,X,Y))
  1332.                                 {
  1333.                                     if (ActiveTextEdit != Window->LoudnessEdit)
  1334.                                         {
  1335.                                             DisableTextEditSelection(ActiveTextEdit);
  1336.                                             ActiveTextEdit = Window->LoudnessEdit;
  1337.                                             EnableTextEditSelection(ActiveTextEdit);
  1338.                                         }
  1339.                                     TextEditDoMouseDown(ActiveTextEdit,X,Y,Modifiers);
  1340.                                 }
  1341.                             else if (TextEditHitTest(Window->ReleasePoint2Edit,X,Y))
  1342.                                 {
  1343.                                     if (ActiveTextEdit != Window->ReleasePoint2Edit)
  1344.                                         {
  1345.                                             DisableTextEditSelection(ActiveTextEdit);
  1346.                                             ActiveTextEdit = Window->ReleasePoint2Edit;
  1347.                                             EnableTextEditSelection(ActiveTextEdit);
  1348.                                         }
  1349.                                     TextEditDoMouseDown(ActiveTextEdit,X,Y,Modifiers);
  1350.                                 }
  1351.                             else if (RadioButtonHitTest(Window->ReleasePoint2StartButton,X,Y))
  1352.                                 {
  1353.                                     if (RadioButtonMouseDown(Window->ReleasePoint2StartButton,X,Y))
  1354.                                         {
  1355.                                             SetRadioButtonState(Window->ReleasePoint2EndButton,False);
  1356.                                         }
  1357.                                 }
  1358.                             else if (RadioButtonHitTest(Window->ReleasePoint2EndButton,X,Y))
  1359.                                 {
  1360.                                     if (RadioButtonMouseDown(Window->ReleasePoint2EndButton,X,Y))
  1361.                                         {
  1362.                                             SetRadioButtonState(Window->ReleasePoint2StartButton,False);
  1363.                                         }
  1364.                                 }
  1365.                             else if (TextEditHitTest(Window->Accent1Edit,X,Y))
  1366.                                 {
  1367.                                     if (ActiveTextEdit != Window->Accent1Edit)
  1368.                                         {
  1369.                                             DisableTextEditSelection(ActiveTextEdit);
  1370.                                             ActiveTextEdit = Window->Accent1Edit;
  1371.                                             EnableTextEditSelection(ActiveTextEdit);
  1372.                                         }
  1373.                                     TextEditDoMouseDown(ActiveTextEdit,X,Y,Modifiers);
  1374.                                 }
  1375.                             else if (TextEditHitTest(Window->Accent2Edit,X,Y))
  1376.                                 {
  1377.                                     if (ActiveTextEdit != Window->Accent2Edit)
  1378.                                         {
  1379.                                             DisableTextEditSelection(ActiveTextEdit);
  1380.                                             ActiveTextEdit = Window->Accent2Edit;
  1381.                                             EnableTextEditSelection(ActiveTextEdit);
  1382.                                         }
  1383.                                     TextEditDoMouseDown(ActiveTextEdit,X,Y,Modifiers);
  1384.                                 }
  1385.                             else if (TextEditHitTest(Window->Accent3Edit,X,Y))
  1386.                                 {
  1387.                                     if (ActiveTextEdit != Window->Accent3Edit)
  1388.                                         {
  1389.                                             DisableTextEditSelection(ActiveTextEdit);
  1390.                                             ActiveTextEdit = Window->Accent3Edit;
  1391.                                             EnableTextEditSelection(ActiveTextEdit);
  1392.                                         }
  1393.                                     TextEditDoMouseDown(ActiveTextEdit,X,Y,Modifiers);
  1394.                                 }
  1395.                             else if (TextEditHitTest(Window->Accent4Edit,X,Y))
  1396.                                 {
  1397.                                     if (ActiveTextEdit != Window->Accent4Edit)
  1398.                                         {
  1399.                                             DisableTextEditSelection(ActiveTextEdit);
  1400.                                             ActiveTextEdit = Window->Accent4Edit;
  1401.                                             EnableTextEditSelection(ActiveTextEdit);
  1402.                                         }
  1403.                                     TextEditDoMouseDown(ActiveTextEdit,X,Y,Modifiers);
  1404.                                 }
  1405.                             else if (TextEditHitTest(Window->PitchDispRateEdit,X,Y))
  1406.                                 {
  1407.                                     if (ActiveTextEdit != Window->PitchDispRateEdit)
  1408.                                         {
  1409.                                             DisableTextEditSelection(ActiveTextEdit);
  1410.                                             ActiveTextEdit = Window->PitchDispRateEdit;
  1411.                                             EnableTextEditSelection(ActiveTextEdit);
  1412.                                         }
  1413.                                     TextEditDoMouseDown(ActiveTextEdit,X,Y,Modifiers);
  1414.                                 }
  1415.                             else if (TextEditHitTest(Window->PitchDispDepthEdit,X,Y))
  1416.                                 {
  1417.                                     if (ActiveTextEdit != Window->PitchDispDepthEdit)
  1418.                                         {
  1419.                                             DisableTextEditSelection(ActiveTextEdit);
  1420.                                             ActiveTextEdit = Window->PitchDispDepthEdit;
  1421.                                             EnableTextEditSelection(ActiveTextEdit);
  1422.                                         }
  1423.                                     TextEditDoMouseDown(ActiveTextEdit,X,Y,Modifiers);
  1424.                                 }
  1425.                             else if (RadioButtonHitTest(Window->PitchDispDepthHertzButton,X,Y))
  1426.                                 {
  1427.                                     if (RadioButtonMouseDown(Window->PitchDispDepthHertzButton,X,Y))
  1428.                                         {
  1429.                                             SetRadioButtonState(Window->PitchDispDepthHalfStepButton,False);
  1430.                                         }
  1431.                                 }
  1432.                             else if (RadioButtonHitTest(Window->PitchDispDepthHalfStepButton,X,Y))
  1433.                                 {
  1434.                                     if (RadioButtonMouseDown(Window->PitchDispDepthHalfStepButton,X,Y))
  1435.                                         {
  1436.                                             SetRadioButtonState(Window->PitchDispDepthHertzButton,False);
  1437.                                         }
  1438.                                 }
  1439.                             else if (TextEditHitTest(Window->HurryUpEdit,X,Y))
  1440.                                 {
  1441.                                     if (ActiveTextEdit != Window->HurryUpEdit)
  1442.                                         {
  1443.                                             DisableTextEditSelection(ActiveTextEdit);
  1444.                                             ActiveTextEdit = Window->HurryUpEdit;
  1445.                                             EnableTextEditSelection(ActiveTextEdit);
  1446.                                         }
  1447.                                     TextEditDoMouseDown(ActiveTextEdit,X,Y,Modifiers);
  1448.                                 }
  1449.                             else if (TextEditHitTest(Window->PitchDispStartEdit,X,Y))
  1450.                                 {
  1451.                                     if (ActiveTextEdit != Window->PitchDispStartEdit)
  1452.                                         {
  1453.                                             DisableTextEditSelection(ActiveTextEdit);
  1454.                                             ActiveTextEdit = Window->PitchDispStartEdit;
  1455.                                             EnableTextEditSelection(ActiveTextEdit);
  1456.                                         }
  1457.                                     TextEditDoMouseDown(ActiveTextEdit,X,Y,Modifiers);
  1458.                                 }
  1459.                             else if (RadioButtonHitTest(Window->PitchDispStartStartButton,X,Y))
  1460.                                 {
  1461.                                     if (RadioButtonMouseDown(Window->PitchDispStartStartButton,X,Y))
  1462.                                         {
  1463.                                             SetRadioButtonState(Window->PitchDispStartEndButton,False);
  1464.                                         }
  1465.                                 }
  1466.                             else if (RadioButtonHitTest(Window->PitchDispStartEndButton,X,Y))
  1467.                                 {
  1468.                                     if (RadioButtonMouseDown(Window->PitchDispStartEndButton,X,Y))
  1469.                                         {
  1470.                                             SetRadioButtonState(Window->PitchDispStartStartButton,False);
  1471.                                         }
  1472.                                 }
  1473.                             else if (TextEditHitTest(Window->DetuneEdit,X,Y))
  1474.                                 {
  1475.                                     if (ActiveTextEdit != Window->DetuneEdit)
  1476.                                         {
  1477.                                             DisableTextEditSelection(ActiveTextEdit);
  1478.                                             ActiveTextEdit = Window->DetuneEdit;
  1479.                                             EnableTextEditSelection(ActiveTextEdit);
  1480.                                         }
  1481.                                     TextEditDoMouseDown(ActiveTextEdit,X,Y,Modifiers);
  1482.                                 }
  1483.                             else if (RadioButtonHitTest(Window->DetuneHertzButton,X,Y))
  1484.                                 {
  1485.                                     if (RadioButtonMouseDown(Window->DetuneHertzButton,X,Y))
  1486.                                         {
  1487.                                             SetRadioButtonState(Window->DetuneHalfStepButton,False);
  1488.                                         }
  1489.                                 }
  1490.                             else if (RadioButtonHitTest(Window->DetuneHalfStepButton,X,Y))
  1491.                                 {
  1492.                                     if (RadioButtonMouseDown(Window->DetuneHalfStepButton,X,Y))
  1493.                                         {
  1494.                                             SetRadioButtonState(Window->DetuneHertzButton,False);
  1495.                                         }
  1496.                                 }
  1497.                             else if (TextEditHitTest(Window->StereoPositionEdit,X,Y))
  1498.                                 {
  1499.                                     if (ActiveTextEdit != Window->StereoPositionEdit)
  1500.                                         {
  1501.                                             DisableTextEditSelection(ActiveTextEdit);
  1502.                                             ActiveTextEdit = Window->StereoPositionEdit;
  1503.                                             EnableTextEditSelection(ActiveTextEdit);
  1504.                                         }
  1505.                                     TextEditDoMouseDown(ActiveTextEdit,X,Y,Modifiers);
  1506.                                 }
  1507.                             else if (TextEditHitTest(Window->SurroundEdit,X,Y))
  1508.                                 {
  1509.                                     if (ActiveTextEdit != Window->SurroundEdit)
  1510.                                         {
  1511.                                             DisableTextEditSelection(ActiveTextEdit);
  1512.                                             ActiveTextEdit = Window->SurroundEdit;
  1513.                                             EnableTextEditSelection(ActiveTextEdit);
  1514.                                         }
  1515.                                     TextEditDoMouseDown(ActiveTextEdit,X,Y,Modifiers);
  1516.                                 }
  1517.                             else if (TextEditHitTest(Window->DurationEdit,X,Y))
  1518.                                 {
  1519.                                     if (ActiveTextEdit != Window->DurationEdit)
  1520.                                         {
  1521.                                             DisableTextEditSelection(ActiveTextEdit);
  1522.                                             ActiveTextEdit = Window->DurationEdit;
  1523.                                             EnableTextEditSelection(ActiveTextEdit);
  1524.                                         }
  1525.                                     TextEditDoMouseDown(ActiveTextEdit,X,Y,Modifiers);
  1526.                                 }
  1527.                             else if (RadioButtonHitTest(Window->DurationAddButton,X,Y))
  1528.                                 {
  1529.                                     if (RadioButtonMouseDown(Window->DurationAddButton,X,Y))
  1530.                                         {
  1531.                                             SetRadioButtonState(Window->DurationMultButton,False);
  1532.                                         }
  1533.                                 }
  1534.                             else if (RadioButtonHitTest(Window->DurationMultButton,X,Y))
  1535.                                 {
  1536.                                     if (RadioButtonMouseDown(Window->DurationMultButton,X,Y))
  1537.                                         {
  1538.                                             SetRadioButtonState(Window->DurationAddButton,False);
  1539.                                         }
  1540.                                 }
  1541.                             break;
  1542.                     }
  1543.             }
  1544.         ERROR((DoItFlag != True) && (DoItFlag != False),PRERR(ForceAbort,
  1545.             "TrackAttributeDialog:  DoItFlag is neither true nor false"));
  1546.  
  1547.         if (DoItFlag)
  1548.             {
  1549.                 MyBoolean                    ErrorNoMemory;
  1550.  
  1551.                 ErrorNoMemory = False;
  1552.  
  1553.                 if (TextEditDoesItNeedToBeSaved(Window->InstrumentEdit))
  1554.                     {
  1555.                         StringTemp = TextEditGetRawData(Window->InstrumentEdit,SYSTEMLINEFEED);
  1556.                         if (StringTemp == NIL)
  1557.                             {
  1558.                                 ErrorNoMemory = True;
  1559.                             }
  1560.                          else
  1561.                             {
  1562.                                 TrackObjectPutNewInstrName(TheTrackThing,StringTemp);
  1563.                             }
  1564.                     }
  1565.  
  1566.                 if (TextEditDoesItNeedToBeSaved(Window->NameEdit))
  1567.                     {
  1568.                         StringTemp = TextEditGetRawData(Window->NameEdit,SYSTEMLINEFEED);
  1569.                         if (StringTemp == NIL)
  1570.                             {
  1571.                                 ErrorNoMemory = True;
  1572.                             }
  1573.                          else
  1574.                             {
  1575.                                 TrackObjectPutName(TheTrackThing,StringTemp);
  1576.                             }
  1577.                     }
  1578.  
  1579.                 if (TextEditDoesItNeedToBeSaved(Window->EarlyLateAdjustEdit))
  1580.                     {
  1581.                         StringTemp = TextEditGetRawData(Window->EarlyLateAdjustEdit,SYSTEMLINEFEED);
  1582.                         if (StringTemp == NIL)
  1583.                             {
  1584.                                 ErrorNoMemory = True;
  1585.                             }
  1586.                          else
  1587.                             {
  1588.                                 PutTrackObjectEarlyLateAdjust(TheTrackThing,
  1589.                                     StringToLongDouble(StringTemp,PtrSize(StringTemp)));
  1590.                                 ReleasePtr(StringTemp);
  1591.                             }
  1592.                     }
  1593.  
  1594.                 if (TextEditDoesItNeedToBeSaved(Window->ReleasePoint1Edit))
  1595.                     {
  1596.                         StringTemp = TextEditGetRawData(Window->ReleasePoint1Edit,SYSTEMLINEFEED);
  1597.                         if (StringTemp == NIL)
  1598.                             {
  1599.                                 ErrorNoMemory = True;
  1600.                             }
  1601.                          else
  1602.                             {
  1603.                                 PutTrackObjectReleasePoint1(TheTrackThing,
  1604.                                     StringToLongDouble(StringTemp,PtrSize(StringTemp)));
  1605.                                 ReleasePtr(StringTemp);
  1606.                             }
  1607.                     }
  1608.  
  1609.                 if (GetRadioButtonState(Window->ReleasePoint1StartButton))
  1610.                     {
  1611.                         PutTrackObjectReleasePoint1StartEndFlag(TheTrackThing,eRelease1FromStart);
  1612.                     }
  1613.                 else if (GetRadioButtonState(Window->ReleasePoint1EndButton))
  1614.                     {
  1615.                         PutTrackObjectReleasePoint1StartEndFlag(TheTrackThing,eRelease1FromEnd);
  1616.                     }
  1617.                 else
  1618.                     {
  1619.                         EXECUTE(PRERR(AllowResume,"TrackAttributeDialog:  release point 1 radio "
  1620.                             "buttons are in an inconsistent state"));
  1621.                     }
  1622.  
  1623.                 if (TextEditDoesItNeedToBeSaved(Window->LoudnessEdit))
  1624.                     {
  1625.                         StringTemp = TextEditGetRawData(Window->LoudnessEdit,SYSTEMLINEFEED);
  1626.                         if (StringTemp == NIL)
  1627.                             {
  1628.                                 ErrorNoMemory = True;
  1629.                             }
  1630.                          else
  1631.                             {
  1632.                                 PutTrackObjectOverallLoudness(TheTrackThing,
  1633.                                     StringToLongDouble(StringTemp,PtrSize(StringTemp)));
  1634.                                 ReleasePtr(StringTemp);
  1635.                             }
  1636.                     }
  1637.  
  1638.                 if (TextEditDoesItNeedToBeSaved(Window->ReleasePoint2Edit))
  1639.                     {
  1640.                         StringTemp = TextEditGetRawData(Window->ReleasePoint2Edit,SYSTEMLINEFEED);
  1641.                         if (StringTemp == NIL)
  1642.                             {
  1643.                                 ErrorNoMemory = True;
  1644.                             }
  1645.                          else
  1646.                             {
  1647.                                 PutTrackObjectReleasePoint2(TheTrackThing,
  1648.                                     StringToLongDouble(StringTemp,PtrSize(StringTemp)));
  1649.                                 ReleasePtr(StringTemp);
  1650.                             }
  1651.                     }
  1652.  
  1653.                 if (GetRadioButtonState(Window->ReleasePoint2StartButton))
  1654.                     {
  1655.                         PutTrackObjectReleasePoint2StartEndFlag(TheTrackThing,eRelease2FromStart);
  1656.                     }
  1657.                 else if (GetRadioButtonState(Window->ReleasePoint2EndButton))
  1658.                     {
  1659.                         PutTrackObjectReleasePoint2StartEndFlag(TheTrackThing,eRelease2FromEnd);
  1660.                     }
  1661.                 else
  1662.                     {
  1663.                         EXECUTE(PRERR(AllowResume,"TrackAttributeDialog:  release point 2 radio "
  1664.                             "buttons are in an inconsistent state"));
  1665.                     }
  1666.  
  1667.                 if (TextEditDoesItNeedToBeSaved(Window->Accent1Edit))
  1668.                     {
  1669.                         StringTemp = TextEditGetRawData(Window->Accent1Edit,SYSTEMLINEFEED);
  1670.                         if (StringTemp == NIL)
  1671.                             {
  1672.                                 ErrorNoMemory = True;
  1673.                             }
  1674.                          else
  1675.                             {
  1676.                                 PutTrackObjectAccent1(TheTrackThing,
  1677.                                     StringToLongDouble(StringTemp,PtrSize(StringTemp)));
  1678.                                 ReleasePtr(StringTemp);
  1679.                             }
  1680.                     }
  1681.  
  1682.                 if (TextEditDoesItNeedToBeSaved(Window->Accent2Edit))
  1683.                     {
  1684.                         StringTemp = TextEditGetRawData(Window->Accent2Edit,SYSTEMLINEFEED);
  1685.                         if (StringTemp == NIL)
  1686.                             {
  1687.                                 ErrorNoMemory = True;
  1688.                             }
  1689.                          else
  1690.                             {
  1691.                                 PutTrackObjectAccent2(TheTrackThing,
  1692.                                     StringToLongDouble(StringTemp,PtrSize(StringTemp)));
  1693.                                 ReleasePtr(StringTemp);
  1694.                             }
  1695.                     }
  1696.  
  1697.                 if (TextEditDoesItNeedToBeSaved(Window->Accent3Edit))
  1698.                     {
  1699.                         StringTemp = TextEditGetRawData(Window->Accent3Edit,SYSTEMLINEFEED);
  1700.                         if (StringTemp == NIL)
  1701.                             {
  1702.                                 ErrorNoMemory = True;
  1703.                             }
  1704.                          else
  1705.                             {
  1706.                                 PutTrackObjectAccent3(TheTrackThing,
  1707.                                     StringToLongDouble(StringTemp,PtrSize(StringTemp)));
  1708.                                 ReleasePtr(StringTemp);
  1709.                             }
  1710.                     }
  1711.  
  1712.                 if (TextEditDoesItNeedToBeSaved(Window->Accent4Edit))
  1713.                     {
  1714.                         StringTemp = TextEditGetRawData(Window->Accent4Edit,SYSTEMLINEFEED);
  1715.                         if (StringTemp == NIL)
  1716.                             {
  1717.                                 ErrorNoMemory = True;
  1718.                             }
  1719.                          else
  1720.                             {
  1721.                                 PutTrackObjectAccent4(TheTrackThing,
  1722.                                     StringToLongDouble(StringTemp,PtrSize(StringTemp)));
  1723.                                 ReleasePtr(StringTemp);
  1724.                             }
  1725.                     }
  1726.  
  1727.                 if (TextEditDoesItNeedToBeSaved(Window->PitchDispRateEdit))
  1728.                     {
  1729.                         StringTemp = TextEditGetRawData(Window->PitchDispRateEdit,SYSTEMLINEFEED);
  1730.                         if (StringTemp == NIL)
  1731.                             {
  1732.                                 ErrorNoMemory = True;
  1733.                             }
  1734.                          else
  1735.                             {
  1736.                                 PutTrackObjectPitchDisplacementRateAdjust(TheTrackThing,
  1737.                                     StringToLongDouble(StringTemp,PtrSize(StringTemp)));
  1738.                                 ReleasePtr(StringTemp);
  1739.                             }
  1740.                     }
  1741.  
  1742.                 if (TextEditDoesItNeedToBeSaved(Window->PitchDispDepthEdit))
  1743.                     {
  1744.                         StringTemp = TextEditGetRawData(Window->PitchDispDepthEdit,SYSTEMLINEFEED);
  1745.                         if (StringTemp == NIL)
  1746.                             {
  1747.                                 ErrorNoMemory = True;
  1748.                             }
  1749.                          else
  1750.                             {
  1751.                                 PutTrackObjectPitchDisplacementDepthAdjust(TheTrackThing,
  1752.                                     StringToLongDouble(StringTemp,PtrSize(StringTemp)));
  1753.                                 ReleasePtr(StringTemp);
  1754.                             }
  1755.                     }
  1756.  
  1757.                 if (GetRadioButtonState(Window->PitchDispDepthHertzButton))
  1758.                     {
  1759.                         PutTrackObjectPitchDisplacementDepthControlFlag(TheTrackThing,
  1760.                             ePitchDisplacementDepthModeHertz);
  1761.                     }
  1762.                 else if (GetRadioButtonState(Window->PitchDispDepthHalfStepButton))
  1763.                     {
  1764.                         PutTrackObjectPitchDisplacementDepthControlFlag(TheTrackThing,
  1765.                             ePitchDisplacementDepthModeHalfSteps);
  1766.                     }
  1767.                 else
  1768.                     {
  1769.                         EXECUTE(PRERR(AllowResume,"TrackAttributeDialog:  pitch displacement "
  1770.                             " depth control radio buttons are in an inconsistent state"));
  1771.                     }
  1772.  
  1773.                 if (TextEditDoesItNeedToBeSaved(Window->HurryUpEdit))
  1774.                     {
  1775.                         StringTemp = TextEditGetRawData(Window->HurryUpEdit,SYSTEMLINEFEED);
  1776.                         if (StringTemp == NIL)
  1777.                             {
  1778.                                 ErrorNoMemory = True;
  1779.                             }
  1780.                          else
  1781.                             {
  1782.                                 PutTrackObjectHurryUp(TheTrackThing,
  1783.                                     StringToLongDouble(StringTemp,PtrSize(StringTemp)));
  1784.                                 ReleasePtr(StringTemp);
  1785.                             }
  1786.                     }
  1787.  
  1788.                 if (TextEditDoesItNeedToBeSaved(Window->PitchDispStartEdit))
  1789.                     {
  1790.                         StringTemp = TextEditGetRawData(Window->PitchDispStartEdit,SYSTEMLINEFEED);
  1791.                         if (StringTemp == NIL)
  1792.                             {
  1793.                                 ErrorNoMemory = True;
  1794.                             }
  1795.                          else
  1796.                             {
  1797.                                 PutTrackObjectPitchDisplacementStartPoint(TheTrackThing,
  1798.                                     StringToLongDouble(StringTemp,PtrSize(StringTemp)));
  1799.                                 ReleasePtr(StringTemp);
  1800.                             }
  1801.                     }
  1802.  
  1803.                 if (GetRadioButtonState(Window->PitchDispStartStartButton))
  1804.                     {
  1805.                         PutTrackObjectPitchDisplacementFromStartOrEnd(TheTrackThing,
  1806.                             ePitchDisplacementStartFromStart);
  1807.                     }
  1808.                 else if (GetRadioButtonState(Window->PitchDispStartEndButton))
  1809.                     {
  1810.                         PutTrackObjectPitchDisplacementFromStartOrEnd(TheTrackThing,
  1811.                             ePitchDisplacementStartFromEnd);
  1812.                     }
  1813.                 else
  1814.                     {
  1815.                         EXECUTE(PRERR(AllowResume,"TrackAttributeDialog:  pitch displacement "
  1816.                             "start/end radio buttons are in an inconsistent state"));
  1817.                     }
  1818.  
  1819.                 if (TextEditDoesItNeedToBeSaved(Window->DetuneEdit))
  1820.                     {
  1821.                         StringTemp = TextEditGetRawData(Window->DetuneEdit,SYSTEMLINEFEED);
  1822.                         if (StringTemp == NIL)
  1823.                             {
  1824.                                 ErrorNoMemory = True;
  1825.                             }
  1826.                          else
  1827.                             {
  1828.                                 PutTrackObjectDetune(TheTrackThing,
  1829.                                     StringToLongDouble(StringTemp,PtrSize(StringTemp)));
  1830.                                 ReleasePtr(StringTemp);
  1831.                             }
  1832.                     }
  1833.  
  1834.                 if (GetRadioButtonState(Window->DetuneHertzButton))
  1835.                     {
  1836.                         PutTrackObjectDetuneControlFlag(TheTrackThing,eDetuningModeHertz);
  1837.                     }
  1838.                 else if (GetRadioButtonState(Window->DetuneHalfStepButton))
  1839.                     {
  1840.                         PutTrackObjectDetuneControlFlag(TheTrackThing,eDetuningModeHalfSteps);
  1841.                     }
  1842.                 else
  1843.                     {
  1844.                         EXECUTE(PRERR(AllowResume,"TrackAttributeDialog:  detune conversion mode "
  1845.                             "radio buttons are in an inconsistent state"));
  1846.                     }
  1847.  
  1848.                 if (TextEditDoesItNeedToBeSaved(Window->StereoPositionEdit))
  1849.                     {
  1850.                         StringTemp = TextEditGetRawData(Window->StereoPositionEdit,SYSTEMLINEFEED);
  1851.                         if (StringTemp == NIL)
  1852.                             {
  1853.                                 ErrorNoMemory = True;
  1854.                             }
  1855.                          else
  1856.                             {
  1857.                                 PutTrackObjectStereoPositioning(TheTrackThing,
  1858.                                     StringToLongDouble(StringTemp,PtrSize(StringTemp)));
  1859.                                 ReleasePtr(StringTemp);
  1860.                             }
  1861.                     }
  1862.  
  1863.                 if (TextEditDoesItNeedToBeSaved(Window->SurroundEdit))
  1864.                     {
  1865.                         StringTemp = TextEditGetRawData(Window->SurroundEdit,SYSTEMLINEFEED);
  1866.                         if (StringTemp == NIL)
  1867.                             {
  1868.                                 ErrorNoMemory = True;
  1869.                             }
  1870.                          else
  1871.                             {
  1872.                                 PutTrackObjectSurroundPositioning(TheTrackThing,
  1873.                                     StringToLongDouble(StringTemp,PtrSize(StringTemp)));
  1874.                                 ReleasePtr(StringTemp);
  1875.                             }
  1876.                     }
  1877.  
  1878.                 if (TextEditDoesItNeedToBeSaved(Window->DurationEdit))
  1879.                     {
  1880.                         StringTemp = TextEditGetRawData(Window->DurationEdit,SYSTEMLINEFEED);
  1881.                         if (StringTemp == NIL)
  1882.                             {
  1883.                                 ErrorNoMemory = True;
  1884.                             }
  1885.                          else
  1886.                             {
  1887.                                 PutTrackObjectDurationAdjust(TheTrackThing,
  1888.                                     StringToLongDouble(StringTemp,PtrSize(StringTemp)));
  1889.                                 ReleasePtr(StringTemp);
  1890.                             }
  1891.                     }
  1892.  
  1893.                 if (GetRadioButtonState(Window->DurationAddButton))
  1894.                     {
  1895.                         PutTrackObjectDurationModeFlag(TheTrackThing,eDurationAdjustAdditive);
  1896.                     }
  1897.                 else if (GetRadioButtonState(Window->DurationMultButton))
  1898.                     {
  1899.                         PutTrackObjectDurationModeFlag(TheTrackThing,eDurationAdjustMultiplicative);
  1900.                     }
  1901.                 else
  1902.                     {
  1903.                         EXECUTE(PRERR(AllowResume,"TrackAttributeDialog:  duration mode "
  1904.                             "radio buttons are in an inconsistent state"));
  1905.                     }
  1906.  
  1907.                 if (ErrorNoMemory)
  1908.                     {
  1909.                         AlertHalt("There was not enough memory to save all of the attributes.",NIL);
  1910.                     }
  1911.             }
  1912.  
  1913.         DisposeSimpleButton(Window->OKButton);
  1914.         DisposeSimpleButton(Window->CancelButton);
  1915.         DisposeTextEdit(Window->NameEdit);
  1916.         DisposeTextEdit(Window->InstrumentEdit);
  1917.         DisposeTextEdit(Window->EarlyLateAdjustEdit);
  1918.         DisposeTextEdit(Window->ReleasePoint1Edit);
  1919.         DisposeRadioButton(Window->ReleasePoint1StartButton);
  1920.         DisposeRadioButton(Window->ReleasePoint1EndButton);
  1921.         DisposeTextEdit(Window->LoudnessEdit);
  1922.         DisposeTextEdit(Window->ReleasePoint2Edit);
  1923.         DisposeRadioButton(Window->ReleasePoint2StartButton);
  1924.         DisposeRadioButton(Window->ReleasePoint2EndButton);
  1925.         DisposeTextEdit(Window->Accent1Edit);
  1926.         DisposeTextEdit(Window->Accent2Edit);
  1927.         DisposeTextEdit(Window->Accent3Edit);
  1928.         DisposeTextEdit(Window->Accent4Edit);
  1929.         DisposeTextEdit(Window->PitchDispRateEdit);
  1930.         DisposeTextEdit(Window->PitchDispDepthEdit);
  1931.         DisposeRadioButton(Window->PitchDispDepthHertzButton);
  1932.         DisposeRadioButton(Window->PitchDispDepthHalfStepButton);
  1933.         DisposeTextEdit(Window->HurryUpEdit);
  1934.         DisposeTextEdit(Window->PitchDispStartEdit);
  1935.         DisposeRadioButton(Window->PitchDispStartStartButton);
  1936.         DisposeRadioButton(Window->PitchDispStartEndButton);
  1937.         DisposeTextEdit(Window->StereoPositionEdit);
  1938.         DisposeTextEdit(Window->SurroundEdit);
  1939.         DisposeTextEdit(Window->DetuneEdit);
  1940.         DisposeRadioButton(Window->DetuneHertzButton);
  1941.         DisposeRadioButton(Window->DetuneHalfStepButton);
  1942.         DisposeTextEdit(Window->DurationEdit);
  1943.         DisposeRadioButton(Window->DurationAddButton);
  1944.         DisposeRadioButton(Window->DurationMultButton);
  1945.         KillWindow(Window->ScreenID);
  1946.         ReleasePtr((char*)Window);
  1947.         /* no return value */
  1948.     }
  1949.